【发布时间】:2017-03-27 15:45:50
【问题描述】:
我需要通过从另一个数据框中提取多个变量来创建频率表。
例如,我有一个包含以下信息的数据框
产品结果位置来源年份月份
我想创建一个基于积极检测(即结果 1 )的频率表,类似于 excel 中的数据透视表。 例如
来源产品位置 2008 2009 2010 2011
其中每年的检测频率是根据类别的总数计算的。
最终结果是我想绘制一个基于 x= 年,y = 频率,颜色 = 来源,分面网格 = 样本
我可以使用 1 的计数来做 ggplot,但我如何使用 freq 来做,以便可以考虑分母?
我的实际数据有 20,000 多行。
抱歉,我无法以某种方式添加代码。
谢谢。
【问题讨论】:
-
我只是使用 dplyr 的 group_by 函数做一个简单的计数。根据需要放入尽可能多的分组字段。鸢尾花数据集的示例:
df %>% group_by(Species, Petal.Width) %>% summarise(COUNT = n()) %>% ungroup() %>% mutate(PERCENT = COUNT/sum(COUNT)) -
谢谢瑞恩。我对 r 很陌生,需要你的更多帮助。在您的回答中,是否汇总 (count = n()) 计算“物种”的计数,即第一个输入?我如何从另一列中选择符合“结果=1”标准的那些?我在 ungroup() 中放了什么?
-
n() 计算组合的每个实例(每个 species-petal.width 组合)。 ungroup() 删除分组,因此您可以进行不应该按组进行的计算。如果您只想选择等于 1 的计数,可以将 mutate() 替换为
filter(COUNT == 1), -
因为我需要找到等于 1 的计数频率。我可以写:Df %>% group_by(species,petal.Width, location,year) %>% summarise (COUNT = n ()) %>% mutate (Percent = (COUNT/sum(COUNT)) %>% filter (COUNT ==1)?
-
不,你把程序搞混了。如果您需要计数百分比==1,我会做
df %>% group_by(Species, Petal.Width) %>% summarise(COUNT = n()) %>% ungroup() %>% mutate(PERCENT = COUNT/sum(COUNT)) %>% filter(COUNT == 1) %>% summarise(COUNT_1 = sum(PERCENT)
标签: r