【问题标题】:assign items from list of lists as column names for data frames将列表列表中的项目分配为数据框的列名
【发布时间】:2021-02-04 19:41:20
【问题描述】:

我有几个没有变量名称的数据框。他们都是不同的。我有一个列表,其中包含与每个数据框一起使用的一组列名称(列表项的名称与匹配的数据框相似)。我想分配/使用数据框中的列名。我尝试用循环做一些事情,然后 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, 0, 1))
#########
sec2<- data.frame(x1 = c("A","B","C","D","E"),                
              x2 = 1:5,
              x3 = c(12, 10, 29, 0, 5))
#########
sec3<- data.frame(x1 = c(100, 21, 91, 53, 35),                
              x2 = 1:5,
              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","B","C")
sec2<-c("AA","BB","CC")
sec3<-c("AAA","BBB","CCC")
#####
listAA<-list(sec1,sec2,sec3);listAA
rm(sec1,sec2,sec3)
#I was hoping to use loop command or lapply to use the list names for the data frames

【问题讨论】:

  • 我看到了 3 个数据帧,写成 CSV,以及 3 个列名向量。我了解到您想将数据框列名称替换为 listAA 中的名称。但我对创建数据帧/写入数据帧/rm() 数据帧代码段感到困惑。只是为了树立榜样吗?您是否希望将这些列名应用于 CSV 文件(文件已更新),或者您是否希望读取这些示例 CSV 文件,并在此过程中应用列名?还是别的什么?
  • 是的,如有任何混淆,我们深表歉意。我将数据框保存为文件夹中的 csv 文件。 rm() 并不重要——我只是在创建示例时使用了它。我想使用 listAA 名称作为数据框列名称。它将更新数据框。再次为混乱感到抱歉。
  • 通过“更新数据帧”,您是想在 R 的环境中更新它们以进行分析,还是更新硬盘上的 CSV 文件(或两者兼而有之)?
  • 更新我硬盘上的 csv 文件。然后我会将数据与其他数据合并以进行分析。再次感谢您的帮助。

标签: r list dataframe columnname


【解决方案1】:

如果我理解正确,您想将列名添加到 data.frames 列表中。您的代码令人困惑,因为您删除了数据框,然后使用它们的名称作为列名:

sec1 <- data.frame(x1 = 1:5,                
              x2 =c("L","M","N","O","P"),
              x3 = c(4, 1, 9, 0, 1))
sec2 <- data.frame(x1 = c("A","B","C","D","E"),                
              x2 = 1:5,
              x3 = c(12, 10, 29, 0, 5))
sec3 <- data.frame(x1 = c(100, 21, 91, 53, 35),                
              x2 = 1:5,
              x3 = c("W","X","Y","Z","A"))
listDTA <- list(sec1=sec1, sec2=sec2, sec3=sec3)
listAA <- list(sec1 = c("A","B","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

【讨论】:

  • 谢谢。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多