【问题标题】:data.table between function handling NA values within fcase在 fcase 中处理 NA 值的函数之间的 data.table
【发布时间】:2021-06-15 22:13:10
【问题描述】:

处理一些杂乱的数据并想知道between() 是否可以以任何方式处理 NA 值?如果以后有问题要过滤掉,期望的操作就是返回 NA。

library(data.table)
test <- data.frame(date=sample(1:9,1e7,replace = TRUE),
                   zip1=rep(1,1e7),
                   start1=c(rep(1,1e7-1),NA), 
                   end1=rep(3,1e7),
                   zip2=c(rep(2,1e7-1e2),rep(NA,1e2)),
                   start2=c(rep(4,1e7-1e2),rep(NA,1e2)),
                   end2=c(rep(6,1e7-1e2),rep(NA,1e2)),
                   zip3=c(rep(3,1e7-1e4),rep(NA,1e4)),
                   start3=c(rep(7,1e7-1e4),rep(NA,1e4)),
                   end3=c(rep(9,1e7-1e4),rep(NA,1e4)))
test$zip <- fcase(
  between(test$date, test$start1, test$end1),
  test$zip1,
  between(test$date, test$start2, test$end2),
  test$zip2,
  between(test$date, test$start3, test$end3),
  test$zip3
)

【问题讨论】:

  • 我不确定确切的问题,但between 有一个NAbounds= 参数,例如:between(3, 1, NA, NAbounds=NA) 返回NA 而不是TRUE
  • 哈,是的。我无法让它工作,这就是我发布的原因。我刚刚意识到我也加载了 tidyverse,这确实是我的问题。 NAbounds+明确命名data.table::between() 我准备好了。如果您想要上网点,请随时回答。

标签: r data.table


【解决方案1】:

我猜这是你想要的。

setDT(test)[,zip:=fcase(date %between% list(start1,end1),zip1,
                        date %between% list(start2,end2),zip2,
                        date %between% list(start3,end3),zip3)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2015-08-25
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多