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

R 在另一列中具有特定字符的组的所有行的子集,r,R,我想为变量B中有“p”的数据集中的ID的所有行子集 Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$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

我想为变量B中有“p”的数据集中的ID的所有行子集

Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$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"
我试着摆弄grep并查看了%like%,但如果变量B中的ID出现p,则无法确定如何保留组中的所有行

Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$B )
Ps%groupby(数据$ID)%>%grep(“P”,数据$B)
由于变量B中的字符而产生错误

感觉好像我以前见过解决这个问题的方法,但我一直没能找到。有什么想法或方向吗?

试试这个:

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
库(dplyr)
数据%>%group_by(ID)%%>%filter(any(grepl(“P”,B)))
#一个tibble:6x2
#组别:ID[2]
身份证B
1 A1
2 1 P2
3 2 B2
4.2 P1
5.2 B1
6.2 B1
注意使用的是
data.frame()
而不是
cbind
。如果要创建数据帧,请尽量避免使用
cbind


此外,大多数dplyr动词不需要像在
groupby(Data$ID)
中那样使用
$
引用变量。只要列名称就足够了。

可以使用带有
grep
表的
base R
选项

Data[Data[,"ID"] %in% names(which(table(Data[,"ID"], grepl("P",Data[, "B"]))[,2]!=0)),]

谢谢你,也谢谢你对data.frame和$的建议!