R - 如果行在新列中包含x打印列标题

时间:2016-10-31 23:51:51

标签: r dataframe header row

我是R的新手和一般的编程。我有一个包含二进制数据的非常大的数据帧。我想阅读各行,并在那里有一个打印列末尾的新列中的列名称。当一行中有多个1时,我希望将所有列标题连接成一个长逗号分隔列表。要更好地解释这一点,请参阅下面的测试数据框:

B <- data.frame(A = c(0, 1, 1, 0), 
            B = c(0, 1, 0, 1))

  A B
1 0 0
2 1 1
3 1 0
4 0 1

我想要生成的输出是:

  A B   C
1 0 0 
2 1 1   A, B
3 1 0   A
4 0 1   B

创建新列“C”并将包含1的行的列标题添加到字符串中。

由于

2 个答案:

答案 0 :(得分:1)

试试这个:

df$C <- apply(df, 1, function(x) paste0(names(df)[as.logical(x)], collapse = ","))

#  A B   C
#1 0 0    
#2 1 1 A,B
#3 1 0   A
#4 0 1   B

答案 1 :(得分:0)

我们可以使用gsub

的矢量化方法
trimws(gsub("^NA,*|,*\\s+NA$", "", do.call(paste, 
      c(as.data.frame( `dim<-`(names(B)[(NA^(B==0))*col(B)], dim(B))), sep=", "))))
#[1] ""     "A, B" "A"    "B"