【发布时间】:2020-07-29 19:35:27
【问题描述】:
我希望根据多个变量从计数数据中计算比例。在下面的示例数据集中,我想知道每个物种在每个日期的每个分数的比例。例如,对于 2019-09-16 的所有 MCAP,2 的比例是多少?
structure(list(date = structure(c(18155, 18155, 18155, 18155,
18155, 18155, 18155, 18155, 18171, 18171, 18171, 18185, 18185,
18185, 18185, 18185, 18185, 18185, 18185, 18185), class = "Date"),
species = c("MCAP", "MCAP", "PCOM", "MCAP", "MCAP", "MCAP",
"PCOM", "PCOM", "PCOM", "PCOM", "PCOM", "MCAP", "MCAP", "MCAP",
"MCAP", "PCOM", "PCOM", "PCOM", "PCOM", "PCOM"), score = c(2,
2, 2, 3, 3, 2, 3, 3, 3, 2, 3, 3, 3, 2, 2, 3, 3, 3, 3, 3)), row.names = c(1L,
2L, 3L, 4L, 8L, 33L, 37L, 38L, 7912L, 7931L, 7947L, 8543L, 8544L,
8545L, 8547L, 12946L, 12947L, 12948L, 12949L, 12950L), class = "data.frame")
【问题讨论】:
-
你能把已经失败的内容包括进来吗?这是你需要的:
with(df, table(species,score))? -
试试这个?
df %>% group_by(species, score, date) %>% summarise(N = n()/ sum(n())) -
@NelsonGon,这不起作用,因为它仍然按分数分组,所以所有比例都将是 1。您需要按所有人分组以获得计数,然后只按物种和日期得到比例。
-
@Matt D 您的方法首先按计数分组,然后按物种/日期分组。谢谢
-
@NelsonGon - 让我们使用示例 MCAP,2019-09-16。您的答案是按前 2 个实例以及分数进行分组(因此得分 2 的组和得分 3 的组)。现在您的解决方案计算这些组中的行数,然后除以所有行的总和 (sum(n()) 根据定义,这始终是一,因为您将所有数据分组,意味着 n() = sum(n()) df %>% group_by(species, score) %>% summarise(N = n()) - 运行它,你会看到它计算每个物种的 obs 数量和得分。与你的比较上面的代码。希望这会有所帮助。
标签: r