R 估算数据表模式和鼠标
R Impute DataTable Mode And Mice
# IMPUTING VALUES
library(data.table)
set.seed(1337)
mydt = q <- data.table(Year = rep(2000:2005, each = 10),
Type = c("A","B"),
Class = sample(1:5,rep=T),
Car = sample(0:1, rep=T),
Boat = sample(1:4, rep=T)
)
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Car := NA]
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Boat := NA]
setkey(mydt,Year,Type)
我所有的数据都是类别和二进制的。
我想做两个项目。
首先我希望按类型和Class来估算Car和Boat的模式。因此,对于 Type 和 Class 的每个组合,找到 Car 和 Boat 的模式并估算它们。
其次我想知道:: 是否也可以使用 'mice' 来做到这一点?
我正在寻求 data.table 和鼠标解决方案。我希望两者都可以,因为 'mice' 在我的大数据中可能需要很长时间!
如果我正确理解了您的要求(您想用类型 x Class 的列模式替换缺失项),这可能是 data.table
解决方案:
# function to calculate mode
stats_mode <- function(x) {
ux <- unique(x[!is.na(x)])
ux[which.max(tabulate(match(x, ux)))]
}
# Generate new column with mode per group
mydt[, `:=`(mCar = stats_mode(Car),
mBoat = stats_mode(Boat)), by = .(Type, Class)]
# Replace missings
mydt[is.na(Car), Car := mCar]
mydt[is.na(Boat), Boat := mBoat]
# Cleansing
mydt[, c("mBoat", "mCar") := NULL]
对于大数据,您可能希望避免包含该模式的两列的物化。相反,您可以存储摘要 table 并将其用作一种查找 table 以查找每个组的模式值。
# IMPUTING VALUES
library(data.table)
set.seed(1337)
mydt = q <- data.table(Year = rep(2000:2005, each = 10),
Type = c("A","B"),
Class = sample(1:5,rep=T),
Car = sample(0:1, rep=T),
Boat = sample(1:4, rep=T)
)
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Car := NA]
naRows <- sample(nrow(mydt),15)
mydt[ naRows, Boat := NA]
setkey(mydt,Year,Type)
我所有的数据都是类别和二进制的。
我想做两个项目。
首先我希望按类型和Class来估算Car和Boat的模式。因此,对于 Type 和 Class 的每个组合,找到 Car 和 Boat 的模式并估算它们。
其次我想知道:: 是否也可以使用 'mice' 来做到这一点?
我正在寻求 data.table 和鼠标解决方案。我希望两者都可以,因为 'mice' 在我的大数据中可能需要很长时间!
如果我正确理解了您的要求(您想用类型 x Class 的列模式替换缺失项),这可能是 data.table
解决方案:
# function to calculate mode
stats_mode <- function(x) {
ux <- unique(x[!is.na(x)])
ux[which.max(tabulate(match(x, ux)))]
}
# Generate new column with mode per group
mydt[, `:=`(mCar = stats_mode(Car),
mBoat = stats_mode(Boat)), by = .(Type, Class)]
# Replace missings
mydt[is.na(Car), Car := mCar]
mydt[is.na(Boat), Boat := mBoat]
# Cleansing
mydt[, c("mBoat", "mCar") := NULL]
对于大数据,您可能希望避免包含该模式的两列的物化。相反,您可以存储摘要 table 并将其用作一种查找 table 以查找每个组的模式值。