这里有一点脑筋急转弯 - 我可以手工做到这一点,但必须采用线性代数的方式来做到这一点。
我已经使用table函数来提出一个数据帧/矩阵,它具有两个变量的重合计数:
>table(gfk_data$AnswerID, gfk_data$AnswerText)
Very unlikely Unlikely Somewhat likely Very likely
1161841 0 0 0 3029
1161842 0 0 175 0
1161843 0 165 0 0
1161844 562 0 0 0
1161845 0 0 0 31
1161846 0 0 26 0
1161847 0 26 0 0
1161848 45 0 0 0
如何将作为行名称的AnswerID映射到AnswerText作为列标题?
也许从原始数据框中提取更容易?
期望的结果将是:
AnswerID AnswerText
1161841 Very likely
1161842 Somewhat likely
1161843 Unlikely
...
到目前为止,我可以考虑使用循环来查找原始数据框中每个AnswerID的AnswerText值,并将该返回的unique()
插入到数据帧中。这肯定会奏效,但也许有更优雅的东西?
答案 0 :(得分:1)
您可以使用as.data.frame.table()
并提取第三列大于0的前两列:
as.data.frame.table(
table(gfk_data$AnswerID, gfk_data$AnswerText)
)[as.data.frame.table(table(gfk_data$AnswerID, gfk_data$AnswerText))[,3] > 0, c(1,2)]
答案 1 :(得分:1)
使用@ lmo的df
的另一个选项是
data.frame(answerID=rownames(df),answerText=names(df)[apply(df,1,which.max)])
答案 2 :(得分:0)
以下是从上面的输出中获取它的一种方法。 "技巧"构造第一列的方法是使用一个查找表,用适当的行名称拉出每列的最大值。
dfNew <- data.frame(answerID=rownames(df)[max.col(df)],
answerText=names(df), stringsAsFactors=F)
answerID answerText
1 1161844 Very_unlikely
2 1161843 Unlikely
3 1161842 Somewhat_likely
4 1161841 Very_likely
5 1161844 Very_unlikely
6 1161843 Unlikely
7 1161842 Somewhat_likely
8 1161841 Very_likely
。
可以使用order
dfNew <- dfNew[order(dfNew$answerID),]
dfNew
answerID answerText
4 1161841 Very_likely
8 1161841 Very_likely
3 1161842 Somewhat_likely
7 1161842 Somewhat_likely
2 1161843 Unlikely
6 1161843 Unlikely
1 1161844 Very_unlikely
5 1161844 Very_unlikely
数据强>
df <- read.table(header=T, text=" Very_unlikely Unlikely Somewhat_likely Very_likely
1161841 0 0 0 3029
1161842 0 0 175 0
1161843 0 165 0 0
1161844 562 0 0 0
1161845 0 0 0 31
1161846 0 0 26 0
1161847 0 26 0 0
1161848 45 0 0 0")
答案 3 :(得分:0)
我发现我可以将生成的矩阵放入数据帧中,然后根据大于0的项目频率进行过滤。
count_df <- as.data.frame(table(gfk_data$AnswerID, gfk_data$AnswerText))
count_df[count_df$Freq>1,]
并且该数据框的前两列将给出我想要的结果
Var1 Var2 Freq
4 1161844 Very unlikely 562
8 1161848 Very unlikely 45
11 1161843 Unlikely 165
15 1161847 Unlikely 26
18 1161842 Somewhat likely 175
22 1161846 Somewhat likely 26
25 1161841 Very likely 3029
29 1161845 Very likely 31