簡體   English   中英

尋求快速或自動化的方法來在R中命名*許多*新的data.table列

[英]Seeking fast or automated method for naming *many* new data.table columns in R

我有一個大型數據集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])

實際上,我想創建兩個以上的新列。 因此,我無法為所有新列鍵入Const_turnoutConst_urban等。

我已經嘗試了兩個想法,但都沒有成功,1。

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

或2。

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

首先一次性獲得所有列的均值

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

然后更改名字

setnames(DT,colnames(DT),vector_of_newnames)

為什么在應用該功能的同一行中更改名稱很重要? 我只想先計算選區商的平均值,然后再設置列名。 這是這樣的:

dt <- dataTest[, lapply(oldColumnNames, function(x) mean(na.omit(get(x)))), 
               by=Constituency]
setnames(dt, c("Constituency", paste("Const", newNames, sep="_")))
dt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM