将多个列的值合并为1个因子

时间:2015-05-26 00:29:07

标签: r reshape tidyr

是否有将多个列值折叠为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

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

建议您查看var checkUserAgent = navigator.userAgent; if (checkUserAgent.match(/iPad/i) || checkUserAgent.match(/iPhone/i)) { var checkBabyId1 = $('#babys_due_date_id').length > 0; if (checkBabyId1 == true) { $('#babys_due_date_id').find('input').prop('readonly', true); } } 包中的gather功能。

tidyr

答案 2 :(得分:1)

你可以试试这个:

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

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

答案 3 :(得分:0)

这是使用我维护的 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)]