2016-11-22 91 views
3

更改data.table的colnames的最简单方法是如何保留原始名称,但前面(或后面)有一个或几个其他字母。 例如我运行下面的代码向data.table中的setname添加字母R

tmp <- DT[, lapply(.SD, mean, na.rm=T), by = .(NACE2), .SDcols=cols] 
tmp1 <- DT[, lapply(.SD, sum, na.rm=T), by = .(NACE2), .SDcols=cols] 
sna <- function(x) { sum(!is.na(x))} 
tmp2 <- DT[, lapply(.SD, sna), by = .(NACE2), .SDcols=cols] 

这导致多个data.tables它们都具有在DT原来的名字,通过.SDcols 有65分选定列确定的相同的名字,我想改变colnames在这样一种方式,名称分别由

  1. M_为tmp
  2. S_之前为tmp1
  3. 01合并 tmp, tmp1, tmp2在一起之前
  4. na_为tmp2

有直接在lapply功能或比避免通过setnames(tmp, ...)重新输入65名更好的方式这样做的呢? 我知道有可能创建一个姓氏的向量,然后将该向量与另一个由例如“m_”但必须有一个更明智的方法。

回答

2

我们可以使用pastesetnames更改列名

setnames(tmp, paste0("m_", names(tmp))) 

,同样

setnames(tmp1, paste0("s_", names(tmp1))) 
setnames(tmp2, paste0("na_", names(tmp2)))