首页 > 解决方案 > 如何使用 lapply、sapply 或 apply 在 R 中过滤数据框?

问题描述

我正在尝试删除所有不包含 10 位数字的字段和那些有 10 个零的字段,我想使用 lapply 或 sapply 或 apply 函数来实现这一点。我下面的代码不起作用:

lapply(df, function(x) filter(x %like% "^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]" | !x %in% "0000000000"))

标签: rapplylapplysapply

解决方案


10 个零是 10 位数字的一部分,因此您无需单独测试它们。

df <- data.frame(a = c('123456789', '123456789', '123'), 
                 b = c('0000000000', '2345', '1234'))

result <- lapply(df, function(x) grep('\\d{10}', x, value = TRUE, invert = TRUE))

#$a
#[1] "123456789" "123456789" "123"      

#$b
#[1] "2345" "1234"

您还可以使用nchar来计算字符数。

result <- lapply(df, function(x) x[nchar(x) != 10])

推荐阅读