【发布时间】:2021-12-14 11:21:27
【问题描述】:
我有一个数据框 df1,如下所示:
| sample | 99_Ape_1 | 93_Cat_1 | 87_Ape_2 | 84_Cat_2 | 90_Dog_1 | 92_Dog_2 |
|---|---|---|---|---|---|---|
| A | 2 | 3 | 1 | 7 | 4 | 6 |
| B | 5 | 9 | 7 | 0 | 3 | 7 |
| C | 6 | 8 | 9 | 2 | 3 | 0 |
| D | 3 | 9 | 0 | 5 | 8 | 3 |
我想通过对标题行中存在的动物(即“Ape”、“Cat”、“Dog”)中的值求和来合并数据框,并最终得到以下数据框:
| sample | Ape | Cat | Dog |
|---|---|---|---|
| A | 3 | 10 | 10 |
| B | 12 | 9 | 10 |
| C | 15 | 10 | 3 |
| D | 3 | 14 | 11 |
我创建了一个代表所有动物的列表,称为“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]])
}
然后通过绑定新的“total”列中的所有值来创建数据框“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”,因此我不能使用重复搜索(对不起!)。
【问题讨论】:
标签: r for-loop sum data-manipulation