寻求在R中命名*many*new data.table列的快速或自动方法

Dr.*_*rox 1 r dataset data.table

我有一个大型数据集,3000x400.我需要创建新列,这些列是由变量子集化的现有列的​​方法constituency.我有一个新列名列表,我想用它来命名新列,在下面调用newNames.但是当我直接输入所需的新名称时,我只能弄清楚如何命名列.

我目前在做什么:

set.seed(1)
dataTest = data.table(turnout_avg = rnorm(20), urban_avg = rnorm(20,5,2), Constituency = c("A","B","C","D"), key = "Constituency")

oldColumnNames = c( "turnout_avg" , "urban_avg")

newNames = c( "turnout" ,   "urban")

# Here's my problem, naming these new columns
comm_means_by_district = cbind( 
dataTest[,list(Const_turnout = mean(na.omit(get(oldColumnNames[[1]])))), by= Constituency],
dataTest[,list(Const_urban = mean(na.omit(get(oldColumnNames[[2]])))),by= Constituency])
Run Code Online (Sandbox Code Playgroud)

实际上,我想创建两个以上的新列.因此,我不能可行性的类型Const_turnout,Const_urban对所有新列,等等.

我已经尝试了两个想法,但都没有用,1.

dataTest[,list(paste("district", newNames[1], sep="_") = mean(na.omit(get(refColNames[[1]])))), by= Constituency]
Run Code Online (Sandbox Code Playgroud)

或2.

dataTest[,list(paste(oldColumnNames[1], "constMean", sep="_") = mean(na.omit(get(refColNames[[1]])))), by= Constituency]
Run Code Online (Sandbox Code Playgroud)

Jer*_*myS 5

首先得到所有列的平均值

DT <- dataTest[,lapply(.SD,function(x) mean(na.omit(x))), by= Constituency]
Run Code Online (Sandbox Code Playgroud)

然后改变后面的colnames

setnames(DT,colnames(DT),vector_of_newnames)
Run Code Online (Sandbox Code Playgroud)