[英]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_turnout
, Const_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.