【发布时间】:2019-03-04 00:09:07
【问题描述】:
问题:
我有多个站点,每个站点有 10 个采样点。
Site Time Sample Species1 Species2 Species3 etc
Home A 1 1 0 4 ...
Home A 2 0 0 2 ...
Work A 1 0 1 1 ...
Work A 2 1 0 1 ...
Home B 1 1 0 4 ...
Home B 2 0 0 2 ...
Work B 1 0 1 1 ...
Work B 2 1 0 1 ...
...
我想获得每个站点的丰富性和丰富性。丰富度是一个地点的物种总数,丰度是一个地点所有物种的所有个体的总数,如下所示:
Site Time Richness Abundance
Home A 2 7
Work A 3 4
Home B 2 7
Work B 3 4
我可以通过两个功能(如下)到达那里。但是,我希望两者都在一个 dplyr 函数中。范围7:34 指的是我的物种矩阵(每行一个站点/样本,物种作为列)。
df1 <- df %>% mutate(Abundance = rowSums(.[,4:30])) %>%
group_by(Site,Time) %>%
summarise_all(sum)
df1$Richness <- apply(df1[,4:30]>0, 1, sum)
如果我尝试在一个函数中同时执行这两项操作,则会收到以下错误
df1 <- df %>% mutate(Abundance = rowSums(.[,4:30]) ) %>%
group_by(Site, Time) %>%
summarise_all(sum) %>%
mutate(Richness = apply(.[,4:30]>0, 1, sum))
Error in mutate_impl(.data, dots) :
Column `Richness` must be length 5 (the group size) or one, not 19
Richness 部分必须在 summarise 函数之后,因为它必须对汇总和分组的数据进行操作。
如何让这个功能发挥作用?
(注意:这以前被标记为此问题的重复: Manipulating seperated species quantity data into a species abundance matrix
然而,这是一个完全不同的问题 - 该问题本质上是关于转置数据集并在单个物种/列中求和。这是关于跨列(多列)汇总所有种。 此外,我实际上认为这个问题的答案非常有帮助——像我这样的生态学家一直在计算丰富度和丰度,我相信他们会喜欢一个专门的问题。)
【问题讨论】:
-
你可能需要
ungroup
标签: r grouping dplyr summarize