我在R中有一个91列51000行的数据框:第一列是我发现的每种生物的分类学分类(“分类”),剩下的是每个样本中的丰度(“S1”,“S2”,“S3”,直到“S90”)。我想将第一列分成六个:列'K'、'P'、'C'、'O'、'F'和'G'。问题是有些单元格的数据不完整,如果我用分号分隔单元格,这些单元格生成的列数会比预期的少。
当前 Dataframe :
| 分类|
| --------------|
| k__细菌|
| k__细菌;g__链梭菌|
| k__细菌;慢球菌属|
| k__细菌;p__慢球菌属;c__寡球菌;〇__寡聚物;f__〇 l|
| k__细菌;p__慢球菌属;c__寡球菌;o__寡聚物;f__Ol;g__Ol|
我的问题是:我可以根据后缀来分隔和组织我的单元格吗?我希望有一个列'K',其中包含所有以'k__'开头的信息,一个列'P',其中包含所有以'p__'开头的信息,等等。空单元格可以用NA填充。
理想的 Dataframe :
| K|P|C|O|F|G|
| --------------|--------------|--------------|--------------|--------------|--------------|
| k__细菌|不适用|不适用|不适用|不适用|不适用|
| k__细菌|不适用|不适用|不适用|不适用|g__链梭菌|
| k__细菌|慢球菌属|不适用|不适用|不适用|不适用|
| k__细菌|慢球菌属|c__寡球菌|o__寡聚体|f__0l|不适用|
| k__细菌|慢球菌属|c__寡球菌|o__寡聚体|f__0l|g__Ol|
拜托,谁能帮帮我?
我试着使用tidyr包中的“separate”函数。
2条答案
按热度按时间ar7v8xwq1#
一种选择是使用
tidyr::separate_longer_delim
(需要tidyr 1.3.0
)和pivot_wider
,如下所示:数据
oyxsuwqo2#
尝试
separate_wider_regex
,它非常适合这个用例。魔术发生在参数“patterns”上,它是一个可选命名元素的向量。未命名的元素被丢弃(在本例中是分号),但命名的元素被提取到带有名称的列中。separate_wider_regex
thoguh,所以我在尝试修复它时会保留这个答案。