首页 > 解决方案 > 根据两列中值的组合从数据框中提取行

问题描述

我有一个数据框

a <- c('A','A','A','A','B','B','C','C')
b <- c(1,2,1,3,1,3,1,6)
c <- c('K','K','H','H','K','K','H','H')

frame <- data.frame(a,b,c)

> frame
  a b c
1 A 1 K
2 A 2 K
3 A 1 H
4 A 3 H
5 B 1 K
6 B 3 K
7 C 1 H
8 C 6 H

现在我想通过以下方式提取数据:如果“a”中的字符串出现在带有“K”的行中并且出现在带有“H”的行中,则带有“K”的行将被忽略。最后它应该是这样的:

> frame
  a b c
1 A 1 H
2 A 3 H
3 B 1 K
4 B 3 K
5 C 1 H
6 C 6 H

也许你有什么想法。谢谢!

标签: rsubset

解决方案


您可以使用在has和in 列intersect中查找字符串,然后提取那些 column包含.aHKccK

frame[!(frame$a %in% intersect(frame$a[frame$c=="K"],
   frame$a[frame$c=="H"]) & frame$c=="K"),]
#  a b c
#3 A 1 H
#4 A 3 H
#5 B 1 K
#6 B 3 K
#7 C 1 H
#8 C 6 H

推荐阅读