[英]Subsetting strings from a column if they match multiple strings in a different column
我有一个 dataframe ,我想在其中对列进行子集化,以仅包含与不同列中的多个字符串匹配的字符串。 这是一些模拟数据:
df1 <- data.frame(species = c("Rufl","Rufl","Soca","Assp","Assp","Elre"),
state = c("warmed","ambient","warmed","warmed","ambient","ambient"))
我想要一个 dataframe,其中只有与“温暖”和“环境”状态匹配的物种,删除仅匹配一个字符串的物种,因此最终的 dataframe 将具有“Rufl”和“Assp”及其给定状态,如如下图
species state
Rufl warmed
Rufl ambient
Assp warmed
Assp ambient
我已经尝试了一些不同的尝试,包括子集 function 和 dplyr,但无法找出正确的方法来让它工作。 这是我失败的尝试:
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
我们需要一个由all
组成的小组
library(dplyr)
df1 %>%
group_by(species) %>%
filter(all(c('warmed', 'ambient') %in% state)) %>%
ungroup
-输出
# A tibble: 4 x 2
# species state
# <chr> <chr>
#1 Rufl warmed
#2 Rufl ambient
#3 Assp warmed
#4 Assp ambient
&
操作不起作用,因为元素不在同一位置
或使用subset
subset(df1, species %in% names(which(rowSums(table(df1) > 0) == 2)))
另一个使用ave
的基本 R 选项
subset(
df1,
ave(state, species, FUN = function(x) sum(c("warmed", "ambient") %in% x)) == 2
)
给
species state
1 Rufl warmed
2 Rufl ambient
4 Assp warmed
5 Assp ambient
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.