r - 为在另一列中具有特定字符的组的所有行设置子集
问题描述
我想对变量 B 中具有“P”的数据集中的所有 ID 行进行子集化。
我的数据:
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 中的字符而产生错误
感觉就像我之前已经看到了解决方案,但我一直无法找到它。有什么想法或方向吗?
解决方案
尝试这个:
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)
. 只需列名就足够了。