我想通过包含x来过滤数据帧ID,其中Hour包含与匹配testVector的所有值的ID行。

ID <- c('A','A','A','A','A','B','B','B','B','C','C')
Hour <- c('0','2','5','6','9','0','2','5','6','0','2')

x <- data.frame(ID, Hour)
x
   ID Hour
1   A    0
2   A    2
3   A    5
4   A    6
5   A    9
6   B    0
7   B    2
8   B    5
9   B    6
10  C    0
11  C    2

testVector <- c('0','2','5')

该解决方案应产生以下数据帧:
x
       ID Hour
    1   A    0
    2   A    2
    3   A    5
    4   A    6
    5   A    9
    6   B    0
    7   B    2
    8   B    5
    9   B    6

删除了Hour C的所有值,因为它缺少Hour5。请注意,对于与ID匹配的testVector,我想保留%in%的所有值。

dplyr解决方案将是理想的选择,但是任何解决方案都值得欢迎。

基于与SO有关的其他相关问题,我猜想我需要all和ojit_code的某种组合,但我不太清楚。

最佳答案

这是另一个无需离开管道的dplyr解决方案:

ID <- c('A','A','A','A','A','B','B','B','B','C','C')
Hour <- c('0','2','5','6','9','0','2','5','6','0','2')

x <- data.frame(ID, Hour)

testVector <- c('0','2','5')

x %>%
  group_by(ID) %>%
  mutate(contains = Hour %in% testVector) %>%
  summarise(all = sum(contains)) %>%
  filter(all > 2) %>%
  select(-all) %>%
  inner_join(x)

##       ID   Hour
##   <fctr> <fctr>
## 1      A      0
## 2      A      2
## 3      A      5
## 4      A      6
## 5      A      9
## 6      B      0
## 7      B      2
## 8      B      5
## 9      B      6

关于r - 过滤与向量的所有值匹配的数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45598397/

10-10 23:26