根据 ID 将数据折叠到单行
Collapsing data to a single row based on ID
我正在尝试根据 ID 将我的数据折叠成一行。数据由 ID(站点位置)和在每个站点(SP1、SP2 等)中发现的物种数量组成。目前它们有多个 ID,具体取决于在该站点上发现了多少个物种,我想折叠数据,所以我只有一行基于站点 ID。
我的数据目前看起来与此类似:
my_data <- data.frame(ID = c(1,2,3,3,3,4,4,4,4),
SP1 = c(10,15,0,0,0,0,0,0,10),
SP2 = c(0,0,5,0,0,8,0,0,0),
SP3 = c(0,0,0,20,0,0,4,0,0),
SP4 = c(0,0,0,0,0,0,0,12,0),
SP5 = c(0,0,0,0,6,0,0,0,0))
我想让它看起来像这样:
my_data2 <- data.frame(ID = c(1,2,3,4),
SP1 = c(10,15,0,10),
SP2 = c(0,0,5,8),
SP3 = c(0,0,20,4),
SP4 = c(0,0,0,12),
SP5 = c(0,0,6,0))
我认为最好的方法是遵循下面的代码行,但不确定要在摘要中包含什么
my_data %>%
group_by(ID)
summarise()
从您的描述中不清楚您要计算哪种类型的摘要。 sum
、max
或其他可能会产生您想要的结果。也就是说,以下将起作用。我在这里使用 sum
,但您可以轻松地替换为另一个函数:
library(tidyverse)
my_data2 <- my_data %>%
group_by(ID) %>%
summarize(
across(everything(), sum)
)
# A tibble: 4 × 6
ID SP1 SP2 SP3 SP4 SP5
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 10 0 0 0 0
2 2 15 0 0 0 0
3 3 0 5 20 0 6
4 4 10 8 4 12 0
我正在尝试根据 ID 将我的数据折叠成一行。数据由 ID(站点位置)和在每个站点(SP1、SP2 等)中发现的物种数量组成。目前它们有多个 ID,具体取决于在该站点上发现了多少个物种,我想折叠数据,所以我只有一行基于站点 ID。
我的数据目前看起来与此类似:
my_data <- data.frame(ID = c(1,2,3,3,3,4,4,4,4),
SP1 = c(10,15,0,0,0,0,0,0,10),
SP2 = c(0,0,5,0,0,8,0,0,0),
SP3 = c(0,0,0,20,0,0,4,0,0),
SP4 = c(0,0,0,0,0,0,0,12,0),
SP5 = c(0,0,0,0,6,0,0,0,0))
我想让它看起来像这样:
my_data2 <- data.frame(ID = c(1,2,3,4),
SP1 = c(10,15,0,10),
SP2 = c(0,0,5,8),
SP3 = c(0,0,20,4),
SP4 = c(0,0,0,12),
SP5 = c(0,0,6,0))
我认为最好的方法是遵循下面的代码行,但不确定要在摘要中包含什么
my_data %>%
group_by(ID)
summarise()
从您的描述中不清楚您要计算哪种类型的摘要。 sum
、max
或其他可能会产生您想要的结果。也就是说,以下将起作用。我在这里使用 sum
,但您可以轻松地替换为另一个函数:
library(tidyverse)
my_data2 <- my_data %>%
group_by(ID) %>%
summarize(
across(everything(), sum)
)
# A tibble: 4 × 6
ID SP1 SP2 SP3 SP4 SP5
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 10 0 0 0 0
2 2 15 0 0 0 0
3 3 0 5 20 0 6
4 4 10 8 4 12 0