gpt4 book ai didi

r - 如何从 R 中的多列创建合并值的新数据框

转载 作者:行者123 更新时间:2023-12-05 09:30:16 24 4
gpt4 key购买 nike

我有一个数据框 df1,如下所示:

<表类="s-表"><头>样本99_Ape_193_Cat_187_Ape_284_Cat_290_Dog_192_Dog_2<正文>一个231746B597037C689230D390583

我想通过对标题行中存在的动物(即“Ape”、“Cat”、“Dog”)的值求和来合并数据框,并最终得到以下数据框:

<表类="s-表"><头>样本猿猫狗<正文>一个31010B12910C15103D31411

我创建了一个代表所有动物的列表,称为“animals_list”

然后我创建了一个数据框列表,将每只动物分成一个单独的数据框:

animals_extract <- c()

for (i in 1:length(animals_list)){
species_extract[[i]] <- df1[, grep(animals_list[i], names(df1))]
}

然后我尝试按样本对行中的每个变量求和:

for (i in 1:length(species_extract)){
species_extract[[i]]$total <- rowSums(species_extract[[i]])
}

然后通过绑定(bind)新“总计”列中的所有值来创建数据框“animal_total”。

animal_total <- NULL

for (i in 1:length(species_extract)){
animal_total[i] <- cbind(species_extract[[i]]$total)
}

不幸的是,这似乎根本不起作用,我想我可能走错了路。非常感谢任何帮助!

编辑:我的数据框有超过 300 只动物,这意味着非常感谢结合使用我的标识符列表 (animals_list)!我还要注意,某些列名称不遵循结构“number_animal_number”,因此我不能使用重复搜索(抱歉!)。

最佳答案

data.table 方法

library(data.table)
library(rlist)
#set data to data.table format
setDT(df1)
# split column 2:n by regex on column names
L <- split.default(df1[,-1], gsub(".*_(.*)_.*", "\\1", names(df1)[-1]))
# Bind together again
data.table(sample = df1$sample,
as.data.table(list.cbind(lapply(L, rowSums))))
# sample Ape Cat Dog
# 1: A 3 10 10
# 2: B 12 9 10
# 3: C 15 10 3
# 4: D 3 14 11

关于r - 如何从 R 中的多列创建合并值的新数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69767937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com