我想在变量B中有"P“的数据集中,对I的所有行进行子集。
我的数据:
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中的字符而产生错误。
我觉得我以前见过解决这个问题的方法,但我一直没能找到。有什么想法或方向吗?
发布于 2018-05-11 16:30:18
试试这个:
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)中那样。只是列名就足够了。
发布于 2018-05-12 08:24:14
带有grep和table的grep选项是
Data[Data[,"ID"] %in% names(which(table(Data[,"ID"], grepl("P",Data[, "B"]))[,2]!=0)),]https://stackoverflow.com/questions/50296525
复制相似问题