首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >筛选列不像列表中任何值的数据集

筛选列不像列表中任何值的数据集
EN

Stack Overflow用户
提问于 2022-09-23 13:10:34
回答 2查看 38关注 0票数 1

我想筛选一个列不像列表中任何值的数据集。

我试过不同的方法,但它们不起作用

代码语言:javascript
复制
month <- c("2022-02", "2022-02", "2022-03", "2022-03", "2022-05","2022-06", "2022-07","2022-02", "2022-04","2022-5","2022-6","2022-7")
total_amount <- c(100, 200, 500, 600, 700, 300, 500, 900, 900, 600, 500, 700)
merchant_name <- c("fpay", "gpay", "upay", "zpay","tpay","spay","mpay", "dpay", "bpay", "opay", "npay", "ypay")

df <- data.frame(month, total_amount, merchant_name)
代码语言:javascript
复制
a <- c("fpay", "gpay", "upay", "zpay","tpay","spay","mpay")
df1 = df %>% list.filter(!merchant_name %like% a)

代码语言:javascript
复制
df1 = subset(df, !merchant_name%like% a)

代码语言:javascript
复制
df1 <- df[apply(df,1,function(x) sum(!x %like% a)>=1),]

然而,df1的观测数与df相同,一点也不滤波。我收到一条警告信息:

在grepl中(模式,向量,ignore.case = ignore.case,固定):参数'pattern‘的长度>1,并且只使用第一个元素

请帮帮我。非常感谢

EN

回答 2

Stack Overflow用户

发布于 2022-09-23 16:04:28

如果这些是子字符串,则在使用grepl对'a‘中的元素进行paste之后使用collapse = "|"

代码语言:javascript
复制
subset(df, grepl(paste(a, collapse = "|"), merchant_name))

或者使用%like%

代码语言:javascript
复制
subset(df, Reduce(`|`, lapply(a, \(x) merchant_name %like% x)))
票数 1
EN

Stack Overflow用户

发布于 2022-09-23 20:41:53

只需做:

代码语言:javascript
复制
df[! df$merchant_name %in% a, ]

为了理解这段代码,让我们从内到外工作。

首先,表达式df$merchant_name %in% a。这将创建一个逻辑向量( TRUEFALSE值的向量),并为df$merchant_name中的每个元素(因此也包括df中的每一行)创建一个条目。如果每一行的条目在aFALSE中,则对应的条目是NA(从技术上讲,如果条目本身是NA,则会有特殊情况)。

然后,! df$merchant_name %in% a否定前面的表达式。这与我们查找那些与列表匹配的行的意图相匹配。

最后,我们可以使用前面的表达式来子集/过滤所需条目的df。为此,我们将使用前面的表达式作为行位置的索引向量(例如,在df[i, j]中,i是行位置的索引向量,j是列位置的索引向量)。带我们走一圈:

代码语言:javascript
复制
df[! df$merchant_name %in% a, ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73828228

复制
相关文章

相似问题

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