在R数据表中读取空白作为缺失(NA)
我试图创建一个函数,可以找到缺失的位置,并在数据表中填充缺失的位置。现在,该函数广泛使用is.na查找缺失位置,并用插补值替换。它适用于所有类型的变量,直到输入为字符类型列且空白单元格缺失,因为is.na无法将其识别为缺失,因此它跳过这些单元格进行插补 例如:在R数据表中读取空白作为缺失(NA),r,function,data.table,R,Function,Data.table,我试图创建一个函数,可以找到缺失的位置,并在数据表中填充缺失的位置。现在,该函数广泛使用is.na查找缺失位置,并用插补值替换。它适用于所有类型的变量,直到输入为字符类型列且空白单元格缺失,因为is.na无法将其识别为缺失,因此它跳过这些单元格进行插补 例如: library(data.table) t<-data.table(x=c('an','ax','','az'),y=c('bn','','bz','bx')) x y 1: an
library(data.table)
t<-data.table(x=c('an','ax','','az'),y=c('bn','','bz','bx'))
x y
1: an bn
2: ax
3: bz
4: az bx
is.na(t[,x])
[1] FALSE FALSE FALSE FALSE
非常感谢您的帮助
谢谢。您可以像这样使用fast nzchar:
is.na(x) | !nzchar(x)
例如:
x <- c(NA,'','a')
is.na(x) | !nzchar(x)
## [1] TRUE TRUE FALSE
另一个使用条件赋值的解决方案使用i:
请给出一个小的可复制示例和预期结果。有关指南,请查看。如果你已经失踪了。那么yourdf$yourCol==应该给出逻辑上的TRUE/FALSE,因为我认为这不适用于数据表。我试图在我的数据表上使用您的代码,但它给出了相同的结果。nzchartest_dt[1]正确,尽管它非常适合矢量类型输入。@Anuj这就是为什么您应该给出一个可复制的示例,以获得所需的输出。即使你们后来做了,但你们的例子仍然是不可复制的。您可以使用dput添加数据吗?请花点时间阅读你问题下方评论中的链接。与其说ifelse的速度慢,不如用replacex,whichis.nax |!Nzharx,'some value'@agstudy关于它速度慢的说法是基于里卡多·萨波尔塔(Ricardo Saporta)在这里的帖子:我认为它实际上不适用于你的答案,但更适用于像ifelsecond这样的情况,昂贵的计算,昂贵的计算2,因为两种昂贵的计算都必须全部进行,即使只使用了其中的一部分。哦,事实上,这里有一个与你类似的例子的基准,它的10倍是慢的:x
x <- c(NA,'','a')
is.na(x) | !nzchar(x)
## [1] TRUE TRUE FALSE
tt <- data.table(x=c('an','ax','','az'),y=c('bn','','bz','bx'))
tt[, lapply(.SD,
function(x)
ifelse(is.na(x) | !nzchar(x),'some value',x)) ]
x y
1: an bn
2: ax some value
3: some value bz
4: az bx
DT <- data.table(x = c('an','ax','','az',NA),
y = c(NA,'bn','','bz','bx'))
DT[x %in% c(NA, ""), x := 'some value']
DT[y %in% c(NA, ""), y := 'some value']
x y
1: an some value
2: ax bn
3: some value some value
4: az bz
5: some value bx