如何替换data.tables列表中的列?
这是约。数据我所拥有的:
data1 <- data.table(V1=c("Mžn","Tue","Wžd","Thř","Fr"),a2012=rnorm(5),a2011=rexp(5,2))
data2 <- data.table(V1=c("Mžn","Tue","Wžd","Thř","Fr"),a2012=rnorm(5),a2011=rexp(5,2),a2010=rbinom(5,2,0.3))
ListData <- list(data1,data2)
以下是正在发生的事情。基本上我需要摆脱UTF-8 enconding:
list.ch <- lapply(ListData, "[",,"V1")
这是一些NA即将推出,但它适用于原始数据,所以没关系:
TranslList <- lapply(list.ch, function(x) try(iconv(x, "UTF-8", "ASCII//TRANSLIT")))
所以我想用上面的原始 ListData 替换纠正的enconding,基本上用编码的名称替换列V1。
matList <- lapply(ListData,as.matrix)
testMat <- lapply(lapply(matList, function(x) x[,-c(1)]),data.table)
FrameList <- mapply(cbind, TranslList, testMat)
这种混乱和不必要的操作中的问题是列名称从V1变为某些,即点[[1L]] [[2L]]
无论如何,如何替换data.tables列表中的列?
答案 0 :(得分:4)
看起来你正在为自己的生活变得艰难。一个简单的lapply()
将会:
library(data.table)
wday <- c("Mžn","Tue","Wžd","Thř","Fr")
data1 <- data.table(V1 = wday, a2012 = rnorm(5), a2011 = rexp(5,2))
data2 <- data.table(V1 = wday, a2012 = rnorm(5), a2011 = rexp(5,2),
a2010 = rbinom(5,2,0.3))
data <- list(data1, data2)
translit <- function(x) iconv(x, "UTF-8", "ASCII//TRANSLIT", sub = "byte")
invisible(lapply(data, function(dt) {
dt[, V1 := translit(V1)]
}))
data
请注意,这会修改原始数据。