R 为什么data.table会更改列的顺序?
在将J中的R 为什么data.table会更改列的顺序?,r,data.table,R,Data.table,在将J中的get与.SDcols组合时,我遇到了数据表的以下令人费解的行为(对我来说):列顺序没有保留,如中所示: mtcarsDT <- setDT(copy(mtcars)) vars <- c( "disp", "hp", "mpg") fun <- "median" mtcarsDT[, lapply(.SD, median), .SDcols = vars] # disp hp mpg # 1: 196.3 123 19.2 mtcarsDT[, lapp
get
与.SDcols
组合时,我遇到了数据表的以下令人费解的行为(对我来说):列顺序没有保留,如中所示:
mtcarsDT <- setDT(copy(mtcars))
vars <- c( "disp", "hp", "mpg")
fun <- "median"
mtcarsDT[, lapply(.SD, median), .SDcols = vars]
# disp hp mpg
# 1: 196.3 123 19.2
mtcarsDT[, lapply(.SD, get(fun)), .SDcols = vars]
# mpg disp hp
# 1: 19.2 196.3 123
我想知道是否有人能解释这种行为:它是一个bug还是一个特性?在后一种情况下,如何推断列的显示顺序
最后,我想根据原始变量名命名新列,调用如下:
newVars <- paste0(vars, "_median")
mtcarsDT[, (newVars) := lapply(.SD, get(fun)), .SDcols = vars]
newVars您可以只使用mtcarsDT[,lapply(.SD,fun),.SDcols=vars]
?从“目测”开始,看起来没有get
,在.SDcols
中给出的顺序就是返回列的顺序。使用get
,原始data.table中列的顺序将被保留。它在此处作为错误归档:
newVars <- paste0(vars, "_median")
mtcarsDT[, (newVars) := lapply(.SD, get(fun)), .SDcols = vars]