子集在另一列中具有特定字符的组的所有行

时间:2018-05-11 16:26:43

标签: r

我希望将数据集中所有行的ID子集化为具有" P"在变量B中。

我的数据:

Data <- cbind(ID = c(1,1,2,2,2,2,3,3), B=c("A1", "P2", "B2", "P1", "B1", "B1", "A4", "D1")) 

   ID  B   
 "1" "A1"
 "1" "P2"
 "2" "B2"
 "2" "P1"
 "2" "B1"
 "2" "B1"
 "3" "A4"
 "3" "D1"

我想要的输出是:

   ID  B   
 "1" "A1"
 "1" "P2"
 "2" "B2"
 "2" "P1"
 "2" "B1"
 "2" "B1"

我尝试摆弄grep并查看%like%但是如果变量B中的ID出现P,则无法弄清楚如何保留组内的所有行。

Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$B )
由于变量B中的字符,

会产生错误

感觉我之前已经看到了解决方案,但我找不到它。任何想法或方向?

2 个答案:

答案 0 :(得分:1)

试试这个:

library(dplyr)
Data <- data.frame(ID = c(1,1,2,2,2,2,3,3), B=c("A1", "P2", "B2", "P1", "B1", "B1", "A4", "D1"))
> Data %>% group_by(ID) %>% filter(any(grepl("P",B)))
# A tibble: 6 x 2
# Groups:   ID [2]
     ID      B
  <dbl> <fctr>
1     1     A1
2     1     P2
3     2     B2
4     2     P1
5     2     B1
6     2     B1

请注意使用data.frame()而不是cbind。如果要创建数据框,请尝试避免cbind

此外,大多数 dplyr 动词并不要求您像$中那样使用group_by(Data$ID)引用变量。只需列名即可。

答案 1 :(得分:0)

base Rgrep的{​​{1}}选项将是

table