纠正稀疏信息

时间:2015-09-21 23:40:54

标签: r

我进行了一项调查,其中一列中的问题答案实际上在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

3 个答案:

答案 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)]