首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R实现基于另一列中没有出现在每个观察中的字符串的组的grep?

如何使用R实现基于另一列中没有出现在每个观察中的字符串的组的grep?
EN

Stack Overflow用户
提问于 2019-08-20 13:26:10
回答 1查看 30关注 0票数 0

必须简化之前一个失败的问题。

我希望提取由'id‘标识的整个组,其中包含另一列中的字符串('inter’或'high'),名为“strmatch”。这个字符串并不会出现在这个组的每个观察中,但是如果它发生了,我希望将这个组分配给相应的数据帧。

数据帧

代码语言:javascript
复制
df <- data.frame(id = c("a", "a", "b", "b","c", "c","d","d"),
                 std = c("y", "y","n","n","y","y","n","n"),
                 strmatch = c("alpha","TMB-inter","beta","TMB-high","gamma","delta","epsilon","TMB-inter"))

看上去像这样

代码语言:javascript
复制
id  std strmatch
a   y   alpha
a   y   TMB-inter
b   n   beta
b   n   TMB-high
c   y   gamma
c   y   delta
d   n   epsilon
d   n   TMB-inter

预期结果

dfa

代码语言:javascript
复制
id  std strmatch
a   y   alpha
a   y   TMB-inter
d   n   epsilon
d   n   TMB-inter

dfb

代码语言:javascript
复制
id  std strmatch
b   n   beta
b   n   TMB-high

dfc

代码语言:javascript
复制
id  std strmatch
c   y   gamma
c   y   delta

我试过什么

代码语言:javascript
复制
split(df, grepl("high", df$strmatch))

只提供两个数据帧,一个包含“高”行,另一个包含其他数据帧。

非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 13:36:42

你可以把它分成两部分。首先查找与"inter|high"匹配的值,然后将它们分解为单独的数据格式,然后查找与任何unique_vals不匹配的值。

代码语言:javascript
复制
unique_vals <- unique(grep("inter|high", df$strmatch, value = TRUE))

c(lapply(unique_vals, function(x) subset(df, id %in% id[strmatch == x])), 
         list(subset(df, !id %in% id[strmatch %in% unique_vals])))


#[[1]]
#  id std  strmatch
#1  a   y     alpha
#2  a   y TMB-inter
#7  d   n   epsilon
#8  d   n TMB-inter

#[[2]]
#  id std strmatch
#3  b   n     beta
#4  b   n TMB-high

#[[3]]
#  id std strmatch
#5  c   y    gamma
#6  c   y    delta
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57574780

复制
相关文章

相似问题

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