我想用该列的中值更新数值列中的 NA。
dt <- data.table(
name = c("A","B","C","D","E"),
sex = c("M","F",NA,"F","M"),
age = c(1,2,3,NA,4),
height = c(178.1, 162.1, NA, 169.5, 172.3)
)
提取数字列
num.cols <- sapply(dt, is.numeric)
num.cols <- names(num.cols)[num.cols]
检查值
median(dt[,age], na.rm = T) # 2.5
median(dt[,height], na.rm = T) #170.9
对每个 num.cols 使用 lapply
dt[,lapply(.SD, function(value)
ifelse(is.na(value), median(value, na.rm=TRUE), value)),
.SDcols = num.cols]
问题,我无法弄清楚如何用 data.table 语法中的估算中位数向量用 NA 覆盖向量?
最佳答案
我们可以使用 zoo
中的 na.aggregate
并将 FUN
指定为 median
来估算缺失值在 .SDcols
中指定所选列的具有中位数
的值,并将这些值分配 (:=
) 到相关列
library(zoo)
dt[, (num.cols) := na.aggregate(.SD, FUN = median),.SDcols = num.cols]
dt
# name sex age height
#1: A M 1.0 178.1
#2: B F 2.0 162.1
#3: C NA 3.0 170.9
#4: D F 2.5 169.5
#5: E M 4.0 172.3
关于r - 如何使用 lapply 将值重新分配给 data.table 的现有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004615/