我是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的行的列标题添加到字符串中。
由于
答案 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"