数据表 lapply 和输出中的附加列

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)

不幸的是,这种方法在处理大数据时速度很慢。显然这在最近的一些更新中得到了优化,但仍然很慢。