gpt4 book ai didi

r - 创建一个列,列出该特定行中包含负值的所有列名称

转载 作者:行者123 更新时间:2023-12-02 01:24:57 24 4
gpt4 key购买 nike

我有一个非常大的数据框。

假设我有类似的东西:

> p
fu2_difftime_mridate_d_date fu2_difftime_premri fu2_difftime_prevfu fu2_difftime_fudate_d_date
1 30.4 12.7 -14.2 6.4
2 12.9 -48.1 -47.6 13.3

我想忽略每行中包含 0 和负值的所有列。我在 dplyr 中寻求一个解决方案,该解决方案创建一个新的协变量,其中包含每行中具有 0 或负值的所有列名称:

> p
negvalues fu2_difftime_premri fu2_difftime_prevfu fu2_difftime_fudate_d_date
1 "fu2_difftime_prevfu" 12.7 -14.2 6.4

数据

p <- structure(list(fu2_date = structure(c(15428, 13746), class = "Date"), 
fu2_mri_date = structure(c(16156, 13732), class = "Date"),
fu2_difftime_mridate_d_date = c(30.4, 12.9), fu2_difftime_premri = c(12.7,
-48.1), fu2_difftime_prevfu = c(-14.2, -47.6), fu2_difftime_fudate_d_date = c(6.4,
13.3)), row.names = 1:2, class = "data.frame")

最佳答案

这是一个 tidyverse 解决方案。基本上我们测试所有列(注意: across(,.. 与 across(everything(), ...) 相同)如果值为负, . < 0 如果为 true 则返回当前列名称: cur_column() 。此后我们必须使用unite :

library(dplyr)
library(tidyr)

p %>%
mutate(across(, ~case_when(. < 0 ~ cur_column()), .names = 'new_{col}')) %>%
unite(Neg_cols, starts_with('new'), na.rm = TRUE, sep = ', ')
    fu2_date fu2_mri_date fu2_difftime_mridate_d_date fu2_difftime_premri fu2_difftime_prevfu
1 2012-03-29 2014-03-27 30.4 12.7 -14.2
2 2007-08-21 2007-08-07 12.9 -48.1 -47.6
fu2_difftime_fudate_d_date Neg_cols
1 6.4 fu2_difftime_prevfu
2 13.3 fu2_difftime_premri, fu2_difftime_prevfu

关于r - 创建一个列,列出该特定行中包含负值的所有列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74938023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com