【发布时间】:2020-08-03 15:33:50
【问题描述】:
我试图通过删除包含某些字符模式的行来对数据帧进行子集化,这些字符模式存储在向量中。我的问题是只从我的数据框中删除了向量的最后一个模式。如何让我的循环迭代地工作,以便从我的数据框中删除存储在向量中的所有模式?
模拟输入:
df<-data.frame(organism=c("human_longname","cat_longname","bird_longname","virus_longname","bat_longname","pangolian_longname"),size=c(6,4,2,1,3,5))
df
organism size
1 human_longname 6
2 cat_longname 4
3 bird_longname 2
4 virus_longname 1
5 bat_longname 3
6 pangolian_longname 5
使用的代码和输出:
vectors<-c("bat","virus","pangolian")
for(i in vectors){df_1<-df[!grepl(i,df$organism),]}
df_1
organism size
1 human_longname 6
2 cat_longname 4
3 bird_longname 2
4 virus_longname 1
5 bat_longname 3
预期输出
df_1
organism size
1 human_longname 6
2 cat_longname 4
3 bird_longname 2
【问题讨论】:
-
试试这个:
df[!df$organism %in% c("bat","virus","pangolian"),] -
... 或:
subset(df, !organism %in% vectors) -
非常感谢大家。我更喜欢这些优雅的解决方案。但是,我仍然很想知道如何使用 for 循环实现这一点:)
-
对不起,伙计们。我忘了提到我必须按模式进行子集化,因为我在数据框中的字符串很长。我将更改为模拟数据以更好地显示这一点。不过非常感谢您的回答。
-
@RikkiFranklinFrederiksen 我已经更新了使用新数据的解决方案。如果你喜欢,请检查。