获取列具有R中的一个或两个字符串的行



我有一个列,它有一个类似的项目列表

Fruit
Apple
Apple, Orange
Kiwi, Orange, Apple 
Kiwi

我想要得到包含(苹果,橙色(的行。我不知道该怎么做,我试过str_detectfilter,但到目前为止都没有效果。如果有其他建议,我将不胜感激。

这行吗:

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)

相关内容

最新更新