我进行了一项调查,其中一列中的问题答案实际上在50列中是稀疏的。我想在一个专栏中合并分发在这些列上的答案。我怎么能做到?
mySurvey <- data.frame(Q1 = c("A", "", "", ""),
Q2 = c("", "B", "", ""),
Q3 = c("", "", "C", ""),
Q4 = c("", "", "", "D") )
> mySurvey
Q1 Q2 Q3 Q4
1 A
2 B
3 C
4 D
期望的结果一个回答稀疏的专栏:
mySurvey
Q1 Q2 Q3 Q4 Q
1 A A
2 B B
3 C C
4 D D
答案 0 :(得分:0)
您可以取消列出数据框以获得答案:
data.frame(
Questions = names(mySurvey),
Answers = unlist(mySurvey[mySurvey != ""])
)
# Questions Answers
# 1 Q1 A
# 2 Q2 B
# 3 Q3 C
# 4 Q4 D
答案 1 :(得分:0)
使用apply
功能来&#34;循环&#34;在每一行上,只保留不是空字符串的行的值。
mySurvey <- data.frame(Q1 = c("A", "", "", ""),
Q2 = c("", "B", "", ""),
Q3 = c("", "", "C", ""),
Q4 = c("", "", "", "D") )
mySurvey <- cbind(mySurvey, Q=apply(mySurvey, 1, function(x) x[x!=""]))
输出:
Q1 Q2 Q3 Q4 Q
1 A A
2 B B
3 C C
4 D D
答案 2 :(得分:0)
我们可以使用max.col
创建列索引,cbind
带行索引,提取元素
mySurvey$Q <-mySurvey[cbind(1:nrow(mySurvey),max.col(mySurvey!=''))]
mySurvey
# Q1 Q2 Q3 Q4 Q
#1 A A
#2 B B
#3 C C
#4 D D
或另一个选项是which
arr.ind=TRUE
以获取行/列索引
mySurvey$Q <- mySurvey[which(mySurvey!='',arr.ind=TRUE)]