我有一个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语句的情况下执行此操作?
我们可以通过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)