首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果列中的字符串与不同列中的多个字符串匹配,则从列中设置字符串

如果列中的字符串与不同列中的多个字符串匹配,则从列中设置字符串
EN

Stack Overflow用户
提问于 2021-04-30 16:35:14
回答 2查看 236关注 0票数 2

我有一个dataframe,其中我想将一个列子集为只包含与一个不同列中多个字符串相匹配的字符串。下面是一些模拟数据:

代码语言:javascript
复制
df1 <- data.frame(species = c("Rufl","Rufl","Soca","Assp","Assp","Elre"),
                  state = c("warmed","ambient","warmed","warmed","ambient","ambient"))

我想要一个只有与“温暖”和“环境”状态相匹配的物种的数据have,删除只匹配一个字符串的物种,这样最后的数据have将有"Rufl“和"Assp”与它们的给定状态,如下所示

代码语言:javascript
复制
species  state
Rufl     warmed
Rufl     ambient
Assp     warmed
Assp     ambient

我尝试过几次不同的尝试,包括使用子集函数和dplyr,但是无法找到正确的方法来使其工作。以下是我失败的尝试:

代码语言:javascript
复制
df2 <- subset(df1$species, state == "warmed" & state == "ambient")

# or this?
df2 <- df1 %>%
        group_by(species) %>%
        filter(state == "warmed",
               state == "ambient")

谢谢你的帮助!

使用R版本4.0.2,Mac OS X 10.13.6

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-30 16:36:19

我们需要一个all的小组

代码语言:javascript
复制
library(dplyr)
df1 %>%
   group_by(species) %>% 
   filter(all(c('warmed', 'ambient') %in% state)) %>%
   ungroup

-output

代码语言:javascript
复制
# A tibble: 4 x 2
#  species state  
#  <chr>   <chr>  
#1 Rufl    warmed 
#2 Rufl    ambient
#3 Assp    warmed 
#4 Assp    ambient

&操作不工作,因为元素不存在于同一位置

或者使用subset

代码语言:javascript
复制
subset(df1, species %in% names(which(rowSums(table(df1) > 0) == 2)))
票数 2
EN

Stack Overflow用户

发布于 2021-04-30 18:07:18

使用ave的另一个基本R选项

代码语言:javascript
复制
subset(
  df1,
  ave(state, species, FUN = function(x) sum(c("warmed", "ambient") %in% x)) == 2
)

给出

代码语言:javascript
复制
  species   state
1    Rufl  warmed
2    Rufl ambient
4    Assp  warmed
5    Assp ambient
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67337458

复制
相关文章

相似问题

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