我正在尝试创建一个功能,可以找到丢失的位置并将数据表中的缺失归咎于此。现在,此函数广泛使用setCity
来找出缺失的位置,并用插补值替换它。它适用于所有类型的变量,直到输入为is.na()
类型列且缺少空白单元格,因为character
无法将其标识为缺失,因此它会跳过这些单元格以进行插补。
示例:
is.na()
应该在哪里
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
非常感谢任何帮助。
感谢。
答案 0 :(得分:4)
您可以像这样使用快速nzchar
:
is.na(x) | !nzchar(x)
例如:
x <- c(NA,'','a')
is.na(x) | !nzchar(x)
## [1] TRUE TRUE FALSE
我将它包装在ifelse
:
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
答案 1 :(得分:0)
使用条件分配的另一种解决方案(使用i
):
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