我有一个data.frames
的list
,而每个data.frame
中第一列的colname
应该由来自向量的动态信息来补充。
示例:
set.seed(1)
df1 <- data.frame(matrix(sample(32), ncol = 8))
names(df1) <- paste(rep(c("a", "b"), each = 4), 1:4, sep = "")
set.seed(2)
df2 <- data.frame(matrix(sample(32), ncol = 8))
names(df2) <- paste(rep(c("a", "b"), each = 4), 1:4, sep = "")
list_dfs <- list(df1, df2)
add_info <- c("add1", "other")
如何添加来自CCD_ 5的信息以将df1中a1的CCD_;a1加1";以及df2中的a1为"1";a1加2";在给定的CCD_ 7结构内以可扩展的方式?其他CCD_ 8不应该被改变。
我尝试了几种在lapply
或for
循环中使用paste0
设置colnames
的方法,并复习了SO上的类似问题,但到目前为止还不能解决这个问题。
您可以执行以下操作:
list_dfs <- lapply(1:length(list_dfs), function(i) {
setNames(list_dfs[[i]],paste(names(list_dfs[[i]]),add_info[[i]]))
})
现在,列表中的第一个dataframe
的原始名称与add_info
的第一个元素连接,第二个add_info
的名称与第二个元素连接。您可以很容易地将其扩展到较长的data.frame
s和相应的add_info
-矢量列表。
更新:如果您只想更改名字,请执行
list_dfs <- lapply(1:length(list_dfs), function(i) {
lastNames <- names(list_dfs[[i]])[2:NCOL(list_dfs[[i]])]
firstName <- paste(names(list_dfs[[i]])[1],add_info[[i]])
setNames(list_dfs[[i]],c(firstName,lastNames))
})