我有一个列,它有一个类似的项目列表
Fruit
Apple
Apple, Orange
Kiwi, Orange, Apple
Kiwi
我想要得到包含(苹果,橙色(的行。我不知道该怎么做,我试过str_detect
和filter
,但到目前为止都没有效果。如果有其他建议,我将不胜感激。
这行吗:
library(dplyr)
library(stringr)
df %>% filter(str_detect(Fruit, 'Apple|Orange'))
# A tibble: 3 x 1
Fruit
<chr>
1 Apple
2 Apple, Orange
3 Kiwi, Orange, Apple
使用的数据:
df
# A tibble: 4 x 1
Fruit
<chr>
1 Apple
2 Apple, Orange
3 Kiwi, Orange, Apple
4 Kiwi
就我个人而言,我喜欢使用grepl()
来解决这类问题。您可以使用正则表达式来选择行。(参见此处的示例(
df <- data.frame(list("fruits" = c("Apple", "Apple, Orange", "Kiwi, Apple", "Kiwi")))
df:的可视化
| id | fruits |
|----|---------------|
| 1 | Apple |
| 2 | Apple, Orange |
| 3 | Kiwi, Apple |
| 3 | Kiwi |
然后你可以写:
df_only_apples <- df[grepl("[Aa]pple", df$fruits),, drop=FALSE]
这会给你
| id | fruits |
|----|---------------|
| 1 | Apple |
| 2 | Apple, Orange |
| 3 | Kiwi, Apple |
但是,如果要选择包含";苹果"以及";Oranges"你可以写df[grepl("([Aa]pple|[Oo]range)", df$fruits)
我们也可以拆分列并使用%in%
library(dplyr)
library(tidyr)
df %>%
mutate(rn = row_number()) %>%
separate_rows(fruits) %>%
group_by(rn) %>%
filter(any(c('Apple', 'Orange') %in% fruits)) %>%
summarise(fruits = toString(fruits), .groups = 'drop') %>%
select(-rn)