【发布时间】:2021-06-07 16:07:59
【问题描述】:
已编辑
本质上,它是一个包含多个样本(“samp_id”)的表格,显示每个样本中存在的“分类单元”的数量(“最少”)。
我想转置/旋转表格,使其看起来像这样;
即将“分类单元”作为第一行,“数据”中的 90 个样本中的每一个作为基于“最小”列的一行,并用其“samp_id”重新命名。所以你会看到每个样本是什么,以及不同“分类单元”中每个样本的“最小”值(在 90 个样本中可能不相同)。
以前,我根据“samp_id”将数据分成多个小标题,选择“分类单元”和“最少”,用“samp_id”重命名“最少”,然后将基于“分类单元”的单个小标题与full_join 使用类似下面的代码,然后转置组合表
ACLOD_11 = data %>%
filter(samp_id == "ACLOD_11") %>%
select(taxon, least) %>%
rename("ACLOD_11" = least)
ACLOD_12 = data ... #as above, but different samp_id
data_final = list(ACLOD_11, ACLOD_12, ...) %>%
reduce(full_join, by = "taxon")
因为在这个包含 90 个样本的数据表之后我有更多的数据表要跟进,所以我希望能够做到这一点,而不必在加入之前将数据单独分成 100 个小标题并手动输入“samp_id”。
我目前已根据“samp_id”将数据拆分为 90 个单独的小标题(“数据”中有 90 个样本)
data_split = data %>%
group_split(samp_id)
但我不确定这是否是最好的方法,或者我下一步应该做什么?
【问题讨论】:
-
这听起来有点像“从长到宽”的问题。您是否考虑过在“samp_id”、“least”和“taxon”列上使用
tidyr::pivot_wider()之类的东西?如果事情非常大并且您需要一些速度,您可以尝试data.table::dcast()扩大。 -
谢谢你,快接近了;我已经编辑了这个问题(希望!)增加更多清晰度,不胜感激!
-
如果您只选择与问题相关的三列(samp_id、least、taxon),
tidyr::pivot_wider(data, names_from = "taxon", values_from = "least")会让您接近吗?如果您希望人们进行测试,请尝试添加一些我们可以复制和粘贴的数据,而不是屏幕截图。 :) 关于如何做到这一点的一些想法here。 -
成功了,感谢您的帮助! - 是的,我知道最好提供一个示例数据,以便其他人可以测试代码:)