【问题标题】:Create frequency table with multiple variables from a dataframe in R从 R 中的数据框中创建具有多个变量的频率表
【发布时间】: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


【解决方案1】:

让我们把它作为一个答案,看看它是否更容易阅读和锻炼。我运行两张表来检查我的工作。第一个计算组合计数 == 1 的所有案例的百分比。第二个是所有案例及其百分比的表格。您会看到 df1 计算一个等于所有组合总数的单个数字,计数为 1。如果您需要跨多年(或其他)执行此操作,只需根据需要考虑按功能分组(您可以分组、取消分组、再次分组、再次取消分组,直到您心满意足为止):

library(dplyr)

df <- iris

df1 <- df %>%
  group_by(Species, Petal.Width) %>%
  summarise(COUNT = n()) %>%
  ungroup() %>%
  mutate(PERCENT = COUNT/sum(COUNT)) %>%
  filter(COUNT == 1) %>%
  summarise(COUNT_1 = sum(PERCENT))


df2 <- df %>%
  group_by(Species, Petal.Width) %>%
  summarise(COUNT = n()) %>%
  ungroup() %>%
  mutate(PERCENT = COUNT/sum(COUNT))

df1

as.data.frame(df2)

【讨论】:

  • 设法做我的图表。 :) 非常感谢瑞恩!
猜你喜欢
  • 1970-01-01
  • 2016-11-26
  • 2021-07-01
  • 2016-11-18
  • 2017-05-22
  • 2012-08-04
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多