【问题标题】:R: how can I calculate the percentages a variable takes on a certain value by group?R:如何按组计算变量对某个值的百分比?
【发布时间】:2021-01-08 20:24:00
【问题描述】:

所以我试图让 r 报告某个变量在组中具有特定值的份额。 例如:让我们考虑一个由组 1,2 和 3 组成的数据集。现在我想知道变量 1 在组 1,2 和 3 中取值 500 的百分比,并将其合并为新变量。 有没有方便的方法来解决问题? 所以它应该看起来像这样:

df
Group  Var1   Var1_perc
1       0      50
1       400    50
1       500    50
1       500    50

其他组以此类推

【问题讨论】:

  • 如何获得50??
  • 你能分享可重现的例子吗?可能正在使用 dput?

标签: r dplyr group-by percentage


【解决方案1】:

我会使用tidyverse 来做到这一点

计算变量在组中取某个值的频率

library(tidyverse)
df %>% 
 group_by(Group,Var1) %>% 
 summarise(count = n()) 

要计算组中的百分比:

df %>% 
  left_join(df %>% 
               group_by(grp) %>% 
               summarise(n = n()), by = "grp" ) %>%
  group_by(grp,value) %>%
  summarise(percentage = n()/n)

整个left_join 的内容是计算一个组在表格中出现的频率。我想不出比这更好的了。

【讨论】:

  • 我不断收到这个:错误:n() 只能在 dplyr 动词中使用。
  • 试试dplyr::summarise()
  • 仅供参考,看起来您使用的与 tidyverse 相关的函数都来自 dplyr,这意味着您可以通过加载而不是所有 tidyverse 库来减少开销
  • 是的,您完全正确,加载tidyverse 可能是一种习惯。我猜@philipp.kn_98 得到的错误是由于一些库冲突,例如在dplyrtidyverse 之上加载plyr
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多