【问题标题】:Can I abbreviate df[ !is.na(df$val) & df$val > 15]?我可以缩写 df[ !is.na(df$val) & df$val > 15] 吗?
【发布时间】:2019-03-31 19:04:17
【问题描述】:

我有一个数据框,我想从中提取 val 中的值大于 15 的记录以及 val 不是 NA 的记录:

 df[ !is.na(df$val) & df$val > 15, ]

由于我假设在 R 中经常需要这样的比较,我想知道这种比较是否可以缩写。事实上,如果 StackOverflow 上已经有人问过这个问题,我不会感到惊讶——但我无法通过搜索找到它。

【问题讨论】:

  • 数据表方式:library(data.table); setDT(df); df[!is.na(val) & val>15]
  • library(data.table); setDT(df); df[val>15] 因为您需要 val>15,所以所有 NA 都会消失,因为它将 NA>15 是 NA
  • @d.b 我忘记了括号中的, - 现在已添加。
  • 不是不想用,而是可以省下几个键位,学起来很开心。

标签: r dataframe comparison na


【解决方案1】:

subset 省略 NA 值并避免重复 df

subset(df, val > 15)

which 也消除了 NA 值,但 df 必须重复:

df[which(df$val > 15), ]

dplyr 包的filter 类似于基础subset

library(dplyr)

df %>% filter(val > 15)

使用 sqldf 会删除 NA 值。

library(sqldf)

sqldf("select * from df where val > 15")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2018-08-20
    • 2021-06-19
    • 2020-06-20
    相关资源
    最近更新 更多