R dplyr 根据给定列的数值过滤行

Den*_*tes 2 r dplyr apache-spark

在 Spark 平台上工作,使用 R 和 RStudio Server,我想过滤给定列(字符串)满足数字条件的 tbl。因此,该列包含数字/整数值('1234')和字符串值('x1234'),我想过滤掉后者。

使用 dyplr 是否可以实现这一点,例如使用过滤器运算符/函数?

我尝试过类似的东西:

tbl2 <- tbl %>% filter(!is.numeric(col1))
Run Code Online (Sandbox Code Playgroud)

顺便说一句:数据存储在其他服务器上,我不想在本地加载数据。因此我无法使用数据框之类的对象。我受限于像 dyplr 这样的库。

非常感谢帮助!

Hua*_*hen 11

我认为这不起作用:tbl2 <- tbl %>% filter(!is.numeric(col1))。在 tbl_df 或 df 中,每一列只有一个类。因此,在您的情况下,包含“123”和“x123”的 col1 应该属于“字符”类。

一种可能的解决方案是将 col1 转换为数字并测试转换是否成功。

tbl2 <- tbl %>% filter(!is.na(as.numeric(col1)))
Run Code Online (Sandbox Code Playgroud)

测试:

library(data.frame)
df <- data.frame(a=1:3,b=2:4)
df[2,2] <- "x123"
class(df$b)
# "character"
df %>% filter(!is.na(as.numeric(b)))
#  a b
#1 1 2
#2 3 4
Run Code Online (Sandbox Code Playgroud)

注意:有一条警告消息。