根据 df B 中的信息聚合 df A 中的列

问题描述 投票:0回答:1

我有一个数据框 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)])
r aggregate
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.