首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在另一列中具有特定字符的组的所有行子集

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

Stack Overflow用户
提问于 2018-05-11 16:26:43
回答 2查看 68关注 0票数 0

我想在变量B中有"P“的数据集中,对I的所有行进行子集。

我的数据:

代码语言:javascript
运行
复制
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"

我想要的产出是:

代码语言:javascript
运行
复制
   ID  B   
 "1" "A1"
 "1" "P2"
 "2" "B2"
 "2" "P1"
 "2" "B1"
 "2" "B1"

我试着摆弄grep,查看%like%,但找不出如果变量B中的ID出现P,如何保留组内的所有行。

代码语言:javascript
运行
复制
Ps <- Data %>% group_by(Data$ID) %>% grep("P", Data$B )

由于变量B中的字符而产生错误。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-11 16:30:18

试试这个:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2018-05-12 08:24:14

带有greptablegrep选项是

代码语言:javascript
运行
复制
Data[Data[,"ID"] %in% names(which(table(Data[,"ID"], grepl("P",Data[, "B"]))[,2]!=0)),]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50296525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档