Max*_*x M 3 r lapply data.table
我只是希望有更方便的方法。成像我想运行一个模型,对某些列进行不同的转换,例如缩尾。我想向模型提供转换后的数据集以及一些不需要转换的附加列。有没有一种实用的方法可以在一行中实现这一点?我不想使用替换数据,:=因为我计划使用不同的转换规范来运行模型。
dt<-data.table(id=1:10, Country=sample(c("Germany", "USA"),10, replace=TRUE), x=rnorm(10,1,10),y=rnorm(10,1,10),factor=factor(sample(LETTERS[1:2],10,replace=TRUE)))
sel.col<-c("x","y")
dt[,lapply(.SD,Winsorize),.SDcols=sel.col,by=factor]
Run Code Online (Sandbox Code Playgroud)
我需要再次调用 data.table 将原始 dt 与转换后的数据合并并注意顺序。
data.table(dt[,.(id,Country),by=factor],
dt[,lapply(.SD,Winsorize),.SDcols=sel.col,by=factor])
Run Code Online (Sandbox Code Playgroud)
我希望我可以在 lapply 调用中包含附加列
dt[,.(lapply(.SD,Winsorize), id, Country),.SDcols=sel.col,by=factor]
Run Code Online (Sandbox Code Playgroud)
还有其他解决方案吗?
小智 5
你只需要吗?
dt[, c(lapply(.SD,Winsorize), list(id = id, Country = Country)), .SDcols=sel.col,by=factor]
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法在处理大数据时速度很慢。显然这在最近的一些更新中得到了优化,但仍然很慢。