我有一个物种丰富度和几个环境变量的数据框架,我已经将其分类并创建了一个"分类列"。我正在努力获得每个箱子中每个物种的丰度总和。我看到许多使用tidyverse的R示例,但似乎都使用了列的实际名称——我有几个数据框架,其中一些有数百个物种名称,我不想键入。
dataframe例子:
head(data) binned Acanthamorpha Belonidae Blenoids
Site1_1 1 0 2 3
Site2_2 2 2 3 0
Site3_1 1 5 1 0
Site4_3 3 0 0 0
Site3_2 2 0 3 0
我用bin值标记站点名称只是为了稍后的可视化目的,但本质上我想创建一个更小的数据框架,如下所示:
bin Acanthamorpha Belonidae Blenoids
1 2 3 3
2 4 6 0
3 3 0 0
我把tidyverses filter/mutate/groupby搞混了。
我已经尝试了很多次,但似乎真的无法通过按bin值组织所有行:
data %>% filter(binned == 1) %>% gather(binned) %>% ???
但是这里的错误还在于调用每个值为binned。我确信有一种方法可以通过垃圾箱打破数据框,然后只需将每个物种的总和作为新行,然后将所有这些行(共5行)保存为新的数据框,但我无法让它与我的任何方法一起工作。
这是你想要的吗?
library(tidyverse)
# Reproducing your data
df1 <- tibble(
binned = c(1, 2, 1, 3, 2),
Acanthamorpha = c(0, 2, 5, 0, 0),
Belonidae = c(2, 3, 1, 0, 3),
Blenoids = c(3, 0, 0, 0, 0)
)
df1 %>%
group_by(binned) %>%
summarise_all(sum)
输出:
# A tibble: 3 x 4
binned Acanthamorpha Belonidae Blenoids
<dbl> <dbl> <dbl> <dbl>
1 1 5 3 3
2 2 2 6 0
3 3 0 0 0