R 合并具有相同变量和观测值的多个数据帧

R 合并具有相同变量和观测值的多个数据帧,r,csv,merge,dataframe,R,Csv,Merge,Dataframe,我每年都有几个CSV文件。每个文件都包含相同的变量和观察值 df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1)) df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5)) 其中: 尝试: 库(data.ta

我每年都有几个
CSV
文件。每个文件都包含相同的变量和观察值

df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
其中:

尝试:

库(data.table)
图书馆(magrittr)
年数_2 _digt%
[年:=y]>%
setkeyv(“名称”)
}))
DT.molt尝试:

库(data.table)
图书馆(magrittr)
年数_2 _digt%
[年:=y]>%
setkeyv(“名称”)
}))
DT.molt尝试:

库(data.table)
图书馆(magrittr)
年数_2 _digt%
[年:=y]>%
setkeyv(“名称”)
}))
DT.molt尝试:

库(data.table)
图书馆(magrittr)
年数_2 _digt%
[年:=y]>%
setkeyv(“名称”)
}))

DT.molt您可以通过编程方式将年份列添加到每个数据帧中,然后将其rbind。下面是一个示例,它依赖于能够从文件名中获取与每个数据帧对应的年份。在这里,我将示例数据帧存储在一个列表中。在您的实际用例中,您可以使用类似于
df.list=sapply(文件名的向量,read.csv)
的方法将csv文件读入列表


您可以通过编程方式将“年份”列添加到每个数据框中,然后将它们重新绑定。下面是一个示例,它依赖于能够从文件名中获取与每个数据帧对应的年份。在这里,我将示例数据帧存储在一个列表中。在您的实际用例中,您可以使用类似于
df.list=sapply(文件名的向量,read.csv)
的方法将csv文件读入列表


您可以通过编程方式将“年份”列添加到每个数据框中,然后将它们重新绑定。下面是一个示例,它依赖于能够从文件名中获取与每个数据帧对应的年份。在这里,我将示例数据帧存储在一个列表中。在您的实际用例中,您可以使用类似于
df.list=sapply(文件名的向量,read.csv)
的方法将csv文件读入列表


您可以通过编程方式将“年份”列添加到每个数据框中,然后将它们重新绑定。下面是一个示例,它依赖于能够从文件名中获取与每个数据帧对应的年份。在这里,我将示例数据帧存储在一个列表中。在您的实际用例中,您可以使用类似于
df.list=sapply(文件名的向量,read.csv)
的方法将csv文件读入列表


以下是一个
lappy
中的工作示例:

制作一些虚拟的
CSV
文件:

df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
df16 <- data.frame(name = c("one", "two", "three"), C = c(1,2,3), B = c(4, 2, 1), A = c(0, 1, 1))
df17 <- data.frame(name = c("one", "two", "three"), C = c(3,1,1), A = c(0, 0, 1), B = c(8, 5, 5))
#get dataframe names
myNames <- ls()[grepl("df",ls())]
lapply(myNames, function(i){write.csv(get(i),paste0(i,".csv"),row.names = FALSE)})

以下是一个
lappy
中的工作示例:

制作一些虚拟的
CSV
文件:

df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
df16 <- data.frame(name = c("one", "two", "three"), C = c(1,2,3), B = c(4, 2, 1), A = c(0, 1, 1))
df17 <- data.frame(name = c("one", "two", "three"), C = c(3,1,1), A = c(0, 0, 1), B = c(8, 5, 5))
#get dataframe names
myNames <- ls()[grepl("df",ls())]
lapply(myNames, function(i){write.csv(get(i),paste0(i,".csv"),row.names = FALSE)})

以下是一个
lappy
中的工作示例:

制作一些虚拟的
CSV
文件:

df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
df16 <- data.frame(name = c("one", "two", "three"), C = c(1,2,3), B = c(4, 2, 1), A = c(0, 1, 1))
df17 <- data.frame(name = c("one", "two", "three"), C = c(3,1,1), A = c(0, 0, 1), B = c(8, 5, 5))
#get dataframe names
myNames <- ls()[grepl("df",ls())]
lapply(myNames, function(i){write.csv(get(i),paste0(i,".csv"),row.names = FALSE)})

以下是一个
lappy
中的工作示例:

制作一些虚拟的
CSV
文件:

df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
df16 <- data.frame(name = c("one", "two", "three"), C = c(1,2,3), B = c(4, 2, 1), A = c(0, 1, 1))
df17 <- data.frame(name = c("one", "two", "three"), C = c(3,1,1), A = c(0, 0, 1), B = c(8, 5, 5))
#get dataframe names
myNames <- ls()[grepl("df",ls())]
lapply(myNames, function(i){write.csv(get(i),paste0(i,".csv"),row.names = FALSE)})



观察结果如何?它们具有相同的属性(即:一、二、三),我可以用df1$year实现这一点。您应该将它们放在列表中,而不是作为单独的数据帧。然后您可以使用
do.call
rbind
dplyr::bind_行
来组合它们。@Gregor这篇文章不错。我稍后再检查。观察结果如何?它们具有相同的属性(即:一、二、三),我可以用df1$year实现这一点。您应该将它们放在列表中,而不是作为单独的数据帧。然后您可以使用
do.call
rbind
dplyr::bind_行
来组合它们。@Gregor这篇文章不错。我稍后再检查。观察结果如何?它们具有相同的属性(即:一、二、三),我可以用df1$year实现这一点。您应该将它们放在列表中,而不是作为单独的数据帧。然后您可以使用
do.call
rbind
dplyr::bind_行
来组合它们。@Gregor这篇文章不错。我稍后再检查。观察结果如何?它们具有相同的属性(即:一、二、三),我可以用df1$year实现这一点。您应该将它们放在列表中,而不是作为单独的数据帧。然后您可以使用
do.call
rbind
dplyr::bind_行
来组合它们。@Gregor这篇文章不错。稍后我会重新检查。setcolorder部分对我来说是新的;谢谢至于其他人,我看不出结果有什么不同。问题是所有帧都有完全相同的变量(示例中为3)。此外,观察值正好是3(在本例中)。观察值(行)由“名称”列表示。它们是地区名称。@user10853
setcolorder
函数来自
data.table
包。你的问题并不清楚你想要的最终结果是什么。如果你能展示出你想要的结果,那就更容易了。我现在重述一下:看看每个变量(A,B,C)是如何随着年份的变化而变化的。你确实得到了结果。你能解释一下这个函数的作用吗?也许没有办法做我一直在想的事情;我想最好的选择是关系数据库。不管怎样,我都会把你的答案记为解决办法。任何新的建议都很受欢迎。具体来说,这部分很奇怪:
setDT%%>”[“(j=
:=
(year,y))%%>%setkeyv(“name”)
setcolorder部分对我来说是新的;谢谢。至于其他部分,我看不出结果有什么不同。问题是所有帧都有完全相同的变量(示例中的3个)。此外,观察值正好是3(在本例中)。观察值(行)由“名称”表示col.它们是地区名称。@user10853
setcolorder
函数来自
data.table
软件包。从您的问题中不清楚您想要的最终结果是什么。如果您能显示所需的输出,将更容易帮助我现在重述它:查看每个变量(A、B、C)的情况每一个“名字”每年都在变化。你确实得到了结果。你能解释一下这个函数的作用吗?也许没有办法做到我所做的
df14 <- data.frame(name = c("one", "two", "three"), A = c(1,2,3), B = c(4, 2, 1), C = c(0, 1, 1))
df15 <- data.frame(name = c("one", "two", "three"), A = c(3,1,1), C = c(0, 0, 1), B = c(8, 5, 5))
df16 <- data.frame(name = c("one", "two", "three"), C = c(1,2,3), B = c(4, 2, 1), A = c(0, 1, 1))
df17 <- data.frame(name = c("one", "two", "three"), C = c(3,1,1), A = c(0, 0, 1), B = c(8, 5, 5))
#get dataframe names
myNames <- ls()[grepl("df",ls())]
lapply(myNames, function(i){write.csv(get(i),paste0(i,".csv"),row.names = FALSE)})
#Solution - read CSV, fix columns, rbind
do.call(rbind,
        lapply(list.files(".","^df\\d*.csv"),
               function(i){
                 d <- read.csv(i)
                 res <- d[,sort(colnames(d))]
                 cbind(res,FileName=i)
               }))
# output
#    A B C  name FileName
# 1  1 4 0   one df14.csv
# 2  2 2 1   two df14.csv
# 3  3 1 1 three df14.csv
# 4  3 8 0   one df15.csv
# 5  1 5 0   two df15.csv
# 6  1 5 1 three df15.csv
# 7  0 4 1   one df16.csv
# 8  1 2 2   two df16.csv
# 9  1 1 3 three df16.csv
# 10 0 8 3   one df17.csv
# 11 0 5 1   two df17.csv
# 12 1 5 1 three df17.csv