R以`scientific_name`为`key`,将其内容合并为一个 `data.frame` 或 `tibble`,其中每行为一个样本,每列为样本的物种相对丰度。注意:用 `join` 或者 `spread`都可以,只要能解决问题。
时间: 2024-10-15 15:25:52 浏览: 33
在R语言中,如果你有两个数据框,其中一个包含物种名称(如`scientific_name`),而另一个数据框包含每个样本的物种计数信息,你可以使用`dplyr`包中的函数来实现这个任务。这里我们假设第一个数据框名为`species_list`,它有`scientific_name`这一列;第二个数据框叫做`sample_counts`,包含了样本ID和对应的物种计数值。
使用`join`函数,你可以这样做:
```R
library(dplyr)
result <- left_join(species_list, sample_counts, by = "scientific_name") %>%
group_by(sample_id) %>%
summarize(percentage = round(n / sum(n), 2)) %>%
spread(key = scientific_name, value = percentage)
```
如果`sample_counts`里有多个样本ID,可以考虑先`pivot_longer`转换成长格式,然后再进行操作:
```R
library(tidyr)
species_list_spread <- species_list %>%
pivot_longer(cols = starts_with("scientific_name"), names_to = "species", values_to = "count") %>%
inner_join(sample_counts, by = c("species" = "scientific_name")) %>%
group_by(sample_id) %>%
mutate(percentage = count / sum(count), percentage = round(percentage, 2)) %>%
select(-count) %>%
spread(species, percentage)
```
这两个例子都假设`species_list`中没有重复的`scientific_name`,并且`sample_counts`的`scientific_name`与`species_list`匹配。如果需要进一步的帮助,请提供两个数据框的具体结构。
阅读全文