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%