根据这些列的值创建包含其他列名称的新列

Create new column containing names of other columns based on values ​of those columns

我正在尝试根据其他变量的值创建一个新的字符变量(在我的示例 V4 中)。我需要使用列名来填充这个新变量。

我有这个:

  V1 V2 V3
1  1  0  1
2  0  1  1
3  0  0  0
4  1  1  1

我希望新变量包含所有值等于 1 的列名

像这样:

V1 V2 V3       V4
1  1  0  1    "V1,V3"
2  0  1  1    "V2,V3"
3  0  0  0     " " 
4  1  1  1   "V1,V2,V3"

示例数据:

data.frame(
   V1 =c(1,0,0,1),
   V2 = c(0,1,0,1),
   V3 = c(1,1,0,1)
)

您可以使用以下代码:

library(dplyr)
df %>%
  rowwise() %>%
  mutate(V4 = paste0(names(.)[c_across() == 1], collapse = ','))

输出:

# A tibble: 4 × 4
# Rowwise: 
     V1    V2    V3 V4        
  <dbl> <dbl> <dbl> <chr>     
1     1     0     1 "V1,V3"   
2     0     1     1 "V2,V3"   
3     0     0     0 ""        
4     1     1     1 "V1,V2,V3"

数据

df <- data.frame(
  V1 = c(1,0,0,1),
  V2 = c(0,1,0,1),
  V3 = c(1,1,0,1)
)

base Rapply

结合使用
df1$V4 <- apply(df1, 1, \(x) toString(names(x)[x ==1]))