我有一个数据框 A,包含植物花粉(物种作为行)中的脂肪酸量(作为列),如下所示:[注意,两者都只是虚构的示例]
species_ID | 丁酸 | 辛酸 | 琥珀酸 |
---|---|---|---|
AcMi | 0.01 | 0 | 2 |
巴武 | 0.002 | 5.2 | 1.4 |
以及数据框 B,行中具有相同的脂肪酸,列中具有附加信息:
物质 | 班级 | 碳 |
---|---|---|
丁酸 | 饱和 | 2 |
辛酸 | 不饱和 | 5 |
琥珀酸 | 饱和 | 5 |
现在我想这样做我的代码: 将数据帧 A 的列名与数据帧 B 中的行名匹配,然后通过数据帧 B 中给定列的信息聚合数据帧 A 的列的数据。 或者更清楚:我想根据 df B、e 提供的背景信息合并 df A 的列。 G。基于类,所以结束如下:
species_ID | 饱和 | 不饱和 |
---|---|---|
AcMi | 2.01 | 0 |
巴武 | 1.402 | 5.2 |
我尝试的是这样的:
aggregate_by_factor <- function(data_fa, background_fa) {
acids_columns <- colnames(data_fa)[-1]
matching_info <- merge(
data.frame(substance=acids_columns),
background_fa,
by="substance"
)
aggregated_data <- aggregate(. ~ class, data=data_fa[,c("species_ID", acids_columns)], sum)
return(aggregated_data)
}
result <- aggregate_by_factor(data_fa, background_fa)
但我收到此错误:
Error in aggregate(. ~ class, data = data_fa[, c("species_ID", acids_columns)], :
unused argument (data = data_fa[, c("species_ID", acids_columns)])
library(tidyverse)
df_1 <- read_table("species_ID Butyric Caprylic Succinic
AcMi 0.01 0 2
BaVu 0.002 5.2 1.4")
df_2 <- read_table("substance class carbons
Butyric saturated 2
Caprylic unsaturated 5
Succinic saturated 5")
df_1 %>%
pivot_longer(!1, names_to = "substance") %>%
left_join(df_2) %>%
summarise(across(value, sum), .by = c(species_ID, class)) %>%
pivot_wider(names_from = class, values_from = value)
# A tibble: 2 × 3
species_ID saturated unsaturated
<chr> <dbl> <dbl>
1 AcMi 2.01 0
2 BaVu 1.40 5.2