dplyr:如何计算每组中不同值的频率

dplyr:如何计算每组中不同值的频率,r,dplyr,frequency,R,Dplyr,Frequency,我可能有一个非常简单的问题,但我想不出来 我有一个数据集,它有两个变量,两个因子。看起来是这样的: my.data<-data.frame(name=c("a","a","b","b","b","b", "b", "b", "e", "e", "e"),

我可能有一个非常简单的问题,但我想不出来

我有一个数据集,它有两个变量,两个因子。看起来是这样的:

my.data<-data.frame(name=c("a","a","b","b","b","b", "b", "b", "e", "e", "e"),
                var1=c(1, 2, 3, 4, 2, 1, 4, 1, 3, 4, 3))
name   Freq1   Freq2   Freq3   Freq4
  a    0,00    0,00    0,5     0,5
  b    0,30    0,30    0,30    0,10
  e    0,20    0,20    0,20    0,40

谢谢。

您可以使用
pivot\u wide
以宽幅格式显示数据-

library(dplyr)
library(tidyr)

my.data %>%
  count(name, var1) %>%
  group_by(name) %>%
  mutate(n = prop.table(n)) %>%
  ungroup %>%
  pivot_wider(names_from = var1, values_from = n, names_prefix = 'Freq')

#  name   Freq1  Freq2  Freq3  Freq4
#  <chr>  <dbl>  <dbl>  <dbl>  <dbl>
#1 a      0.5    0.5   NA     NA    
#2 b      0.333  0.167  0.167  0.333
#3 e     NA     NA      0.667  0.333
库(dplyr)
图书馆(tidyr)
my.data%>%
计数(名称,var1)%>%
分组单位(名称)%>%
变异(n=属性表(n))%>%
解组%>%
pivot\u更宽(名称\u from=var1,值\u from=n,名称\u前缀='Freq')
#名称Freq1 Freq2 Freq3 Freq4
#          
#1 a 0.5 0.5 NA NA
#2 b 0.333 0.167 0.167 0.333
#3 e NA 0.667 0.333

您也可以使用基本R

prop.table(table(my.data), 1)
返回

    var1
name         1         2         3         4
   a 0.5000000 0.5000000 0.0000000 0.0000000
   b 0.3333333 0.1666667 0.1666667 0.3333333
   e 0.0000000 0.0000000 0.6666667 0.3333333

我们还可以利用package
门卫
在这里发挥巨大的优势:

library(janitor)

my.data %>%
  tabyl(name, var1) %>%
  adorn_percentages()

 name         1         2         3         4
    a 0.5000000 0.5000000 0.0000000 0.0000000
    b 0.3333333 0.1666667 0.1666667 0.3333333
    e 0.0000000 0.0000000 0.6666667 0.3333333


这样看起来好多了,我的朋友,谢谢你。看门人我最喜欢的汇总/交叉列表软件包嘿,真是太棒了。非常感谢你的回答。我很感激:)嗨,罗纳克,非常感谢。尽管它对这些数据有效。我的那些不起作用。我得到以下错误:警告消息:值不是唯一标识的;输出将包含列表列。*使用
values\u fn=list
抑制此警告。*使用
values\u fn=length
来识别重复项出现的位置*使用
values\u fn={summary\u fun}
来总结重复项……这很奇怪,不应该发生。你能试着用
dplyr::count
替换
count
看看有什么变化吗?嗨,我的代码开头已经有了。我在所有这些操作之前应用了一个过滤器。是的,但是
count
也是
plyr
库的一部分,我觉得它可能是无意中屏蔽了
dplyr
中的
count
。因此,我要求使用
dplyr::count
而不是仅使用
count
。如果这没有帮助,你可以使用
pivot\u wide(name\u from=var1,values\u from=n,names\u prefix='Freq',values\u fn=sum)
对每个组合的值进行求和。我想我不应该把它们作为因素。嘿,这很有效:)非常感谢你的回答!
    var1
name         1         2         3         4
   a 0.5000000 0.5000000 0.0000000 0.0000000
   b 0.3333333 0.1666667 0.1666667 0.3333333
   e 0.0000000 0.0000000 0.6666667 0.3333333
library(janitor)

my.data %>%
  tabyl(name, var1) %>%
  adorn_percentages()

 name         1         2         3         4
    a 0.5000000 0.5000000 0.0000000 0.0000000
    b 0.3333333 0.1666667 0.1666667 0.3333333
    e 0.0000000 0.0000000 0.6666667 0.3333333
my.data %>%
  tabyl(name, var1) %>%
  adorn_percentages() %>%
  adorn_totals(c('row', 'col')) %>%
  adorn_pct_formatting(2)

  name      1      2      3      4   Total
     a 50.00% 50.00%  0.00%  0.00% 100.00%
     b 33.33% 16.67% 16.67% 33.33% 100.00%
     e  0.00%  0.00% 66.67% 33.33% 100.00%
 Total 83.33% 66.67% 83.33% 66.67% 300.00%