当元素与列表匹配时删除行

时间:2018-12-19 15:48:59

标签: r if-statement conditional-statements delete-row

我有一个看起来像这样的数据集:

Col1 Col2
0.7   AA
0.6   BBB
0.2   RR
0.8   TTT
0.0   SS

还有另一个类似的数据集

List
BBB
RR
TTT

当第二列中的值与第二个数据集中列出的任何名称都不匹配时,我想从第一个数据集中删除行。最终产品看起来像这样:

Col1 Col2
0.6   BBB
0.2   RR
0.8   TTT

我找不到任何简单的方法可以在R中运行它。我为for和if循环尝试了不同的方法,但是没有用。有人会知道一个简单的解决方案吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

Base R解决方案:

数据集:

df1=read.table(text="Col1 Col2
          0.7   AA
          0.6   BBB
          0.2   RR
          0.8   TTT
          0.0   SS",header=T)
 df2=read.table(text="List
           BBB
           RR
           TTT",header=T)

代码:

df1[df1$Col2 %in% df2$List,]

输出:

  Col1 Col2
2  0.6  BBB
3  0.2   RR
4  0.8  TTT

答案 1 :(得分:1)

使用data.table:

dt <- data.table(Col1 = c(0.7, 0.6, 0.2, 0.8, 0), Col2 = c("AA", "BBB", "RR", "TTT", "SS"))
myList <- list("BBB", "RR", "TTT")

dt[Col2 %in% myList]

给你:

   Col1 Col2
1:  0.6  BBB
2:  0.2   RR
3:  0.8  TTT