Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从R中的数据帧创建具有多个变量的频率表_R - Fatal编程技术网

从R中的数据帧创建具有多个变量的频率表

从R中的数据帧创建具有多个变量的频率表,r,R,我需要通过从另一个数据帧中提取多个变量来创建一个频率表 例如,我有一个带有以下信息的数据帧 产品结果位置来源年份月份 我想创建一个基于阳性检测(即结果1)的频率表,类似于excel中的透视表。 比如说 源产品位置2008 2009 2010 2011 其中,每年的检测频率根据类别的总计数计算 最终的结果是,我想绘制一个基于 x=年份,y=频率,颜色=来源,刻面网格=样本 我可以使用1的计数来绘制ggplot,但是如何使用freq来代替它,以便考虑分母呢 我的实际数据有20000多行 很抱歉,我无

我需要通过从另一个数据帧中提取多个变量来创建一个频率表

例如,我有一个带有以下信息的数据帧

产品结果位置来源年份月份

我想创建一个基于阳性检测(即结果1)的频率表,类似于excel中的透视表。 比如说

源产品位置2008 2009 2010 2011

其中,每年的检测频率根据类别的总计数计算

最终的结果是,我想绘制一个基于 x=年份,y=频率,颜色=来源,刻面网格=样本

我可以使用1的计数来绘制ggplot,但是如何使用freq来代替它,以便考虑分母呢

我的实际数据有20000多行

很抱歉,我无法以某种方式添加代码


谢谢。

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

库(dplyr)
df%
汇总(计数=n())%>%
解组()%>%
变异(百分比=计数/总和(计数))%>%
过滤器(计数==1)%>%
总结(计数1=总和(百分比))
df2%
分组依据(种类、花瓣宽度)%>%
汇总(计数=n())%>%
解组()%>%
变异(百分比=计数/总和(计数))
df1
as.data.frame(df2)

我只需要使用dplyr的groupby函数进行简单的计数。根据需要放入尽可能多的分组字段。虹膜数据集示例:
df%>%groupby(Species,Petal.Width)%%>%summary(COUNT=n())%%>%ungroup()%%>%mutate(PERCENT=COUNT/sum(COUNT))
。我对r很陌生,需要你更多的帮助。在ans中,Summary(count=n())是否计算“物种”的计数,即第一次输入?如何从另一列中选择满足“结果=1”标准的内容?解组()中应该放什么?n()计算组合的每个实例(每个物种-花瓣宽度组合)。ungroup()删除分组,这样您就可以进行不应分组的计算。如果只想选择等于1的计数,可以将mutate()替换为
过滤器(COUNT==1)
,因为我需要找到等于1的计数频率。我可以写:Df%>%groupby(species,petal.Width,location,year)%%>%summary(COUNT=n())%%>%mutate(Percent=(COUNT/sum(COUNT))%%>%filter(COUNT==1)?不,你把程序搞混了。如果你需要计数的百分比==1,我就做
Df%>%groupby(species,petal.Width)%%>%summary(COUNT=n())>%ungroup()%%>%mutate(PERCENT=COUNT/sum(COUNT))%%>%filter(COUNT==1)%%>%summary(COUNT\u 1=sum(PERCENT)
成功绘制了我的图表。:)非常感谢Ryan!
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)