我有一个数据框 df1,如下所示:
我想通过对标题行中存在的动物(即“Ape”、“Cat”、“Dog”)的值求和来合并数据框,并最终得到以下数据框:
我创建了一个代表所有动物的列表,称为“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
https://stackoverflow.com/questions/69767937/
相关文章:
python - 如何并排放置两个或多个 ASCII 图像?
rust - 如何使用 Serde 只允许一个字段或另一个字段?
postgresql - 在 PostgreSQL 中存储 UUID 的最佳数据类型是什么?
c++ - 我将如何在输入的任何文本的长度下加上下划线以及大写每个字母
r - pivot_longer 对于具有相同 names_to 的多个集合
javascript - 如何在 UI5 中对 F5 按键执行自己的操作?
java - 从 Double.toLongBits 创建的 long 中获取 double