将多个列合并为一个

Nie*_*and 1 r dplyr

我有一个R data.frame(简化的情况,实际上有几十个TRUE/FALSE列):

 name = c("ball", "pen", "box") 
 red = c(TRUE, FALSE, FALSE) 
 green = c(TRUE, TRUE, FALSE) 
 blue = c(TRUE, TRUE, FALSE) 
 df = data.frame(name, red, green, blue)

name   red green  blue
1 ball  TRUE  TRUE  TRUE
2  pen FALSE  TRUE  TRUE
3  box FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我想在df中附加一列,其中包含标记TRUE为一个的所有颜色的串联:

name   red green  blue   color
1 ball  TRUE  TRUE  TRUE red,green,blue
2  pen FALSE  TRUE  TRUE green, blue
3  box FALSE FALSE FALSE na
Run Code Online (Sandbox Code Playgroud)

有没有办法在不编写繁琐的ifelse/ paste语句的情况下执行此操作?

Mau*_*ers 5

我们可以通过toString以下方式使用base R :

df$color <- apply(df[, -1], 1, function(x) toString(names(df[, -1])[x]));
df;
#  name   red green  blue            color
#1 ball  TRUE  TRUE  TRUE red, green, blue
#2  pen FALSE  TRUE  TRUE      green, blue
#3  box FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)