r - 如何使用 lapply 将值重新分配给 data.table 的现有列?

标签 r data.table lapply

我想用该列的中值更新数值列中的 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/

相关文章:

r - 按关键列合并两个 data.frames

r - 将相关矩阵绘制成图表

python - 通过 RPy 查看 R 数据示例(示例 : lmeSplines)

r - 是否有 R 函数允许您在命令中插入变量?

r - 改变 ddply 的输出

r - 使用分组计算过去和 future 特定事件的发生次数

r - l 在 R 中应用箱线图

r - 在R中按组删除数据尾部

r - 如何在函数中将新汇总列的名称传递给 data.table?

r - 如何防止用户使用 Shiny dateRangeInput 在开始日期之前设置结束日期