在r中的data.table缩放

Rok*_*050 4 r scale data.table

       LC  RC TOEIC eua again  class
   1: 490 390   880  90     0 100818
   2: 495 395   890  90     0 100818
   3: 490 330   820  90     0 100818
   4: 495 460   955  96     0 100818
   5: 495 370   865  91     0 100818
  ---                               
1021: 470 400   870  61     0 100770
1022: 260 180   440  48     0 100770
1023: 345 190   535  39     0 100770
1024: 450 295   745  65     0 100770
1025: 395 230   625  79     0 100770
Run Code Online (Sandbox Code Playgroud)

这是名为"analy"的data.table

我想要缩放变量"LC","RC","TOEIC","eua"

我可以像这样扩展

analy[,LC:=scale(LC)]
analy[,RC:=scale(RC)]
analy[,TOEIC:=scale(TOEIC)]
analy[,eua:=scale(eua)]
Run Code Online (Sandbox Code Playgroud)

但是,我想知道如何一次扩展变量

asb*_*asb 10

analy[ , c("LC", "RC", "TOEIC", "eua") := lapply(list(LC, RC, TOEIC, eua), scale)] 
Run Code Online (Sandbox Code Playgroud)

一个更方便的方法是(正如@David在评论中提到的):

cols <- c("LC", "RC", "TOEIC", "eua")
analy[, (cols) := lapply(.SD, scale), .SDcols=cols]
Run Code Online (Sandbox Code Playgroud)

请注意,(周围cols是必要的,以便cols评估以获取列名称,然后通过引用修改它们.这样我们仍然可以继续这样做:DT[ ,col := val].

  • `analy [,c("LC","RC","TOEIC","eua"):= lapply(.SD,scale),. SDcols = c("LC","RC","TOEIC"," eua")]`将是一种更正确的方法 (2认同)