将多列值折叠为 1 个因子

colapse multiple columns values into 1 factor

是否有将多个列值合并为 1 个因子的函数? 每条记录的列 2:4 恰好有 1 个 TRUE 值。 记录的结果值应该是具有真实值的列名。

输入数据框:

data <- data.frame(user=c(1,2,3,4), blue=c(T,F,T,F), green=c(F,F,F,T), red=c(F,T,F,F))

  user  blue green   red
1    1  TRUE FALSE FALSE
2    2 FALSE FALSE  TRUE
3    3  TRUE FALSE FALSE
4    4 FALSE  TRUE FALSE

预期输出:

  user color
1    1  blue
2    2   red
3    3  blue
4    4 green
cbind(data[1], color = apply(data[-1], 1, function(x) names(data[-1])[x]))
  user color
1    1  blue
2    2   red
3    3  blue
4    4 green

你可以试试这个:

data$named.colors <- factor(apply(data[,2:4], 1, function(row) which(row == T)), labels = c("blue", "green", "red"))

它遍历每一行,找到为真的列,然后将其转化为一个因子。

这是使用我维护的 qdapTools 包的方法:

library(qdapTools)
data[["color"]] <- unlist(counts2list(data[-1]))

##   user  blue green   red color
## 1    1  TRUE FALSE FALSE  blue
## 2    2 FALSE FALSE  TRUE   red
## 3    3  TRUE FALSE FALSE  blue
## 4    4 FALSE  TRUE FALSE green

如果您只想 usercolor 使用 data[c(1, 5)]

建议你看看tidyr包中的gather函数。

require("tidyr")
require("dplyr")
data %>% gather(color, TF, -user) %>% filter(TF == T) %>% select(-TF) %>% arrange(user)
#   user color
# 1    1  blue
# 2    2   red
# 3    3  blue
# 4    4 green