在 Spark 平台上工作,使用 R 和 RStudio Server,我想在给定列(字符串)满足数字条件的情况下过滤我的 tbl。因此,该列包含数字/整数值 ('1234') 和字符串值 ('x1234'),我想过滤掉后者。
这是否可以使用 dyplr,例如使用过滤器运算符/函数?
我试过类似的东西:
tbl2 <- tbl %>% filter(!is.numeric(col1))
顺便说一句:数据存储在其他服务器上,我不想在本地加载数据。因此我无法使用像数据框这样的对象。我受限于像 dyplr 这样的库。
非常感谢您的帮助!
最佳答案
我认为这行不通:tbl2 <- tbl %>% filter(!is.numeric(col1))
.在 tbl_df 或 df 中,每一列只有一个类。因此,在您的情况下,包含“123”和“x123”的 col1 应该属于“字符”类。
一种可能的解决方案是将 col1 转换为数字并测试转换是否成功。
tbl2 <- tbl %>% filter(!is.na(as.numeric(col1)))
测试:
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
注意:有一条警告消息。
关于R dplyr 根据给定列的数值过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41223743/