R语言 当所有值单独列出时,查找同名值的模式[重复]

zd287kbt  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(106)

此问题已在此处有答案

How to get the mode of a group in summarize in R(2个答案)
How to find the statistical mode?(35个回答)
4天前关闭。
我在找同一篇课文对应多个答案的模式。我有一个dataframe与2列,用户ID和他们的答案。我目前每个用户ID有多个条目用于他们的每个答案,我不知道如何将这些答案组合或分组在一起以找到模式或如何使用find_mode函数。它目前看起来像下表,用户ID在各行中有多个条目,并且没有按顺序排列。这个表的规模要小得多,因为我处理的是大约100个用户ID,答案在4-25之间(如果有区别的话,所有答案都在1-6之间)。我不知道如何创建一个reprex,所以我已经尽我所能,以显示你不使用截图!
DF当前显示为:

|  UserID  |  Answer  |
| -------- | -------- |
| ID1      |      2   |
| ID3      |      4   |
| ID1      |      5   |
| ID2      |      4   |
| ID2      |      1   |
| ID3      |      3   |
| ID1      |      3   |
| ID2      |      1   |
| ID3      |      4   |

字符串
我已经成功地完成了我想要的,使用均值函数,但显然我并不想找到均值,我想找到众数,但我不知道怎么做。下面是我用来求平均值的代码,希望它能帮助给予了解我的目标结果是什么-代码已经被修改,以便在这些示例表中有意义。

answers_mean <- aggregate(DF[, 3], list(UserID=DF$UserID), mean)


理想地,在找到模式之后,来自上面的表将看起来像这样。

| UserID  |  AnsMod  |
| -------- | -------- |
| ID1      |      2   |
| ID2      |      1   |
| ID3      |      4   |


到目前为止,我认为我可能需要按用户ID对数据进行分组,并在summarise func find_mode下进行总结以找到模式(不确定如何做到这一点)或将数据更广泛地旋转,然后将每个用户ID列出一次,并在同一行上列出所有相应的答案,然后找到每行的模式(再次不确定如何做到这一点)任何帮助,例如代码或如何实现这一点的建议,将不胜感激!

rsaldnfx

rsaldnfx1#

A模式函数

Mode <- function(x) {
   val <- unique(x)
   val[which.max(tabulate(match(x, val)))]
}

字符串
使用aggregate

aggregate(Answer ~ UserID, df, Mode)
  UserID Answer
1    ID1      2
2    ID2      1
3    ID3      4

数据

df <- structure(list(UserID = c("ID1", "ID3", "ID1", "ID2", "ID2", 
"ID3", "ID1", "ID2", "ID3"), Answer = c(2L, 4L, 5L, 4L, 1L, 3L, 
3L, 1L, 4L)), class = "data.frame", row.names = c(NA, -9L))

ogq8wdun

ogq8wdun2#

使用dplyr函数通过UserID获得Answer计数,然后按ID取最高计数:

library(dplyr)

df |> 
  count(UserID, Answer) |> 
  group_by(UserID) |> 
  slice_max(order_by = n, with_ties = FALSE)

字符串
输出量:

UserID Answer     n
  <chr>   <int> <int>
1 ID1         2     1
2 ID2         1     2
3 ID3         4     2


注意:使用with_ties = TRUE返回模态值的关系,就像这里的ID1一样。

相关问题