我有一些代码,在一个地方最终得到一个数据帧列表,我真的想转换为一个大数据帧.
我从之前的一个问题中得到了一些指示,这个问题试图做类似但更复杂的事情.
这是我开始的一个例子(为了说明,这是非常简化的):
listOfDataFrames <- vector(mode = "list", length = 100)
for (i in 1:100) {
listOfDataFrames[[i]] <- data.frame(a=sample(letters, 500, rep=T),
b=rnorm(500), c=rnorm(500))
}
Run Code Online (Sandbox Code Playgroud)
我目前正在使用这个:
df <- do.call("rbind", listOfDataFrames)
Run Code Online (Sandbox Code Playgroud) 我想把merge几个data.frames合二为一data.frame.因为我有一个完整的文件列表,我试图用循环结构来做.
到目前为止,循环方法工作正常.然而,它看起来效率很低,我想知道是否有更快更容易的方法.
这是场景:我有一个包含多个.csv文件的目录.每个文件包含可用作合并变量的相同标识符.由于文件的大小相当大,我想把每个文件一次一个地读入R而不是一次读取所有文件.所以我得到了目录的所有文件,list.files并在前两个文件中读取.之后我用它merge来买一个data.frame.
FileNames <- list.files(path=".../tempDataFolder/")
FirstFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[1], sep=""),
header=T, na.strings="NULL")
SecondFile <- read.csv(file=paste(".../tempDataFolder/", FileNames[2], sep=""),
header=T, na.strings="NULL")
dataMerge <- merge(FirstFile, SecondFile, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
all=T)
Run Code Online (Sandbox Code Playgroud)
现在我使用for循环将所有剩余的.csv文件和merge它们放入已存在的文件中data.frame:
for(i in 3:length(FileNames)){
ReadInMerge <- read.csv(file=paste(".../tempDataFolder/", FileNames[i], sep=""),
header=T, na.strings="NULL")
dataMerge <- merge(dataMerge, ReadInMerge, by=c("COUNTRYNAME", "COUNTRYCODE", "Year"),
all=T)
}
Run Code Online (Sandbox Code Playgroud)
即使它工作得很好我想知道是否有更优雅的方式来完成工作?
我的问题是如何在系统R中加入两个或多个数据帧?
例如:
我有两个数据框:
第一:
x y z
1 3 2 4
2 4 5 7
3 5 6 8
Run Code Online (Sandbox Code Playgroud)
第二:
x y z
1 1 1 1
2 4 5 7
Run Code Online (Sandbox Code Playgroud)
我需要这个:
x y z
1 3 2 4
2 4 5 7
3 5 6 8
4 1 1 1
5 4 5 7
Run Code Online (Sandbox Code Playgroud)
我试图为每个向量使用append,如下所示:
for(i in 1:length(first)){
Run Code Online (Sandbox Code Playgroud)mix[[i]]<-append(first[i], second[i])}f <-do.call(rbind,mix)
但它不像我需要的那样工作.我没有得到我的矩阵,我有一些不同的结构.
我有一个元素列表,像这样
[[1]]
[1] 9.623571 5.334566 7.266597 6.510794 4.301958
[[2]]
[1] 9.693326 9.015892 1.266178 8.547392 4.326199
Run Code Online (Sandbox Code Playgroud)
我想将它转换为数据帧,如下所示:
V1 V2 V3 V4 V5
9.623571 5.334566 7.266597 6.510794 4.301958
9.693326 9.015892 1.266178 8.547392 4.326199
Run Code Online (Sandbox Code Playgroud)
因此,列表条目内相同位置的所有元素都合并在同一列中.
它必须是与"rbind"相关的东西,因为结果就像在做:
rbind(list[[1]],list[[2]]...)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将它应用于列表的所有条目.任何关于此的亮点都将受到赞赏.
非常感谢你提前.
蒂娜.