R计算一行而不是列的模式

标签 r

通常人们想计算每个问题的众数,但在我的例子中,我需要计算所有问题的每个受访者的众数。

这是我的数据的样子:

> head(TiposMotivA)
  Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20 Q21
1  5  4  4  4  6  6  7  6  4   6   6   6   4   4   4   4   6   7   4   4   6
2  5  4  4  5  5  5  5  5  5   5   7   5   4   3   1   6   6   5   6   7   7
3  4  5  4  4  5  4  5  4  5   4   5   4   5   4   5   4   5   4   5   4   5
4  5  5  7  7  4  6  6  6  7   7   6   7   7   6   6   7   4   7   6   6   7
5  6  1  7  6  7  7  7  7  7   7   6   7   2   2   3   6   3   7   7   7   7
6  4  4  3  3  4  5  4  3  4   7   6   6   4   4   6   4   5   7   6   6   7

这个解决方案是我迄今为止找到的最好的解决方案:

apply(TiposMotivA, 1, Compose(table,
                    function(i) i==max(i),
                    which,
                    names,
                    function(i) paste0(i, collapse='/')
                    )
      )

它由 Matthew Lundberg 提供:Select majority number of each row in matrix using r

它产生了这个:

 [1] "4"   "5"   "4"   "7"   "7"   "4"   "7"   "6"   "7"   "7"   "7"   "7"   "7" 
[14] "5/6" "7"   "6"   "7"   "6"   "7"   "7"   "7"   "7"   "7"   "7"   "7"   "7"
[27] "7"   "7"   "7"   "5"   "2"   "7"   "7"   "7"   "7"   "7"   "6"   "6"   "7"
[40] "4/7" "3"   "4"   "7"   "5/7" "6"   "7"   "7"   "6"   "7"   "6"   "7"   "7"
[53] "7"   "6"   "7"   "7"   "5/7" "7"   "7"   "7"   "7"   "7"  
> 

我的问题对某些人来说似乎很基本,但让我抓狂。 我每行只需要一个模式,所以当有两个模式时,我只需要第一个。 我曾尝试使用 split() 但没有成功。

所以,我需要的是获取每一行的模式,如上所述,但是当有两行时只有第一种模式。

像这样:

 [1] "4"   "5"   "4"   "7"   "7"   "4"   "7"   "6"   "7"   "7"   "7"   "7"   "7" 
[14] "5" "7"   "6"   "7"   "6"   "7"   "7"   "7"   "7"   "7"   "7"   "7"   "7"
[27] "7"   "7"   "7"   "5"   "2"   "7"   "7"   "7"   "7"   "7"   "6"   "6"   "7"
[40] "4" "3"   "4"   "7"   "5" "6"   "7"   "7"   "6"   "7"   "6"   "7"   "7"
[53] "7"   "6"   "7"   "7"   "5" "7"   "7"   "7"   "7"   "7"  
> 

我们将不胜感激任何帮助。

最佳答案

which.max 可用于查找第一个最大值的位置:

apply(TiposMotivA, 1, function(x) { tab <- table(x); names(tab)[which.max(tab)] } )

给予:

  1   2   3   4   5   6 
"4" "5" "4" "7" "7" "4" 

不需要包。

关于R计算一行而不是列的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200108/

相关文章:

r - 在 MacOS/CRAN 上构建 R 包时包含 boost tokenizer.hpp 文件时出错

r - 使用 RGLPK 在 R 中进行梦幻足球线性规划

R,通过根据另一个向量计算值来重组向量

R:在堆栈栏上显示字符或类别

r - “interpreter readable” 打印(在 R 中)

r - dplyr mutate - 如何使用 mutate 正确应用自定义函数?

r - 有一组点线图和垂直线图的单独图例

r - 单击 map 后,ObserveEvent 不会打印出图层 ID

python - rpy2 - 如何将数据帧作为 RData 文件保存到磁盘?

r - 如何将多个必要的模式传递给 str_subset?