首页 > 解决方案 > 在 fcase 中处理 NA 值的函数之间的 data.table

问题描述

处理一些杂乱的数据并想知道是否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
)

标签: rdata.table

解决方案


我想这是你想要的。

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

推荐阅读