问题描述
我有几个没有变量名称的数据框。他们都是不同的。我有一个列表,其中包含一组与每个数据框一起使用的列名(列表项的类似名称与匹配的数据框)。我想在数据框中分配/使用列名。我尝试用循环做一些事情,然后 lapply 但我就是无法得到它。下面是我正在谈论的一个例子。对于此处不完美的编码和解释,我预先道歉。我确信答案是我应该能够做的。非常感谢任何帮助。
#Activate a package
library(rio)
##################################################
#Create data frames
dir.create("data/")
sec1<- data.frame(x1 = 1:5,x2 =c("L","M","N","O","P"),x3 = c(4,1,9,1))
#########
sec2<- data.frame(x1 = c("A","B","C","D","E"),x2 = 1:5,x3 = c(12,10,29,5))
#########
sec3<- data.frame(x1 = c(100,21,91,53,35),x3 = c("W","X","Y","Z","A"))
#Export into folder as csv file
export(sec1,"data/sec1.csv")
export(sec2,"data/sec2.csv")
export(sec3,"data/sec3.csv")
#Clear out these files for Now
rm(sec1,sec2,sec3)
###############################################
#Create a list of columns names
sec1<-c("A","C")
sec2<-c("AA","BB","CC")
sec3<-c("AAA","BBB","CCC")
#####
listAA<-list(sec1,sec3);listAA
rm(sec1,sec3)
#I was hoping to use loop command or lapply to use the list names for the data frames
解决方法
如果我理解正确,您想将列名添加到 data.frames 列表中。您的代码令人困惑,因为您删除了数据框,然后使用它们的名称作为列名:
sec1 <- data.frame(x1 = 1:5,x2 =c("L","M","N","O","P"),x3 = c(4,1,9,1))
sec2 <- data.frame(x1 = c("A","B","C","D","E"),x2 = 1:5,x3 = c(12,10,29,5))
sec3 <- data.frame(x1 = c(100,21,91,53,35),x3 = c("W","X","Y","Z","A"))
listDTA <- list(sec1=sec1,sec2=sec2,sec3=sec3)
listAA <- list(sec1 = c("A","C"),sec2 = c("AA","BB","CC"),sec3 = c("AAA","BBB","CCC"))
现在使用循环将 listDTA
中的列名称分配给列表 listAA
中的数据框:
n <- length(listDTA)
for (i in seq_len(n)) {
colnames(listDTA[[i]]) <- listAA[[i]]
}
listDTA
# $sec1
# A B C
# 1 1 L 4
# 2 2 M 1
# 3 3 N 9
# 4 4 O 0
# 5 5 P 1
# $sec2
# AA BB CC
# 1 A 1 12
# 2 B 2 10
# 3 C 3 29
# 4 D 4 0
# 5 E 5 5
# $sec3
# AAA BBB CCC
# 1 100 1 W
# 2 21 2 X
# 3 91 3 Y
# 4 53 4 Z
# 5 35 5 A