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(在本例中)。观察值(行)由“名称”列表示。它们是地区名称。@user10853setcolorder
函数来自data.table
包。你的问题并不清楚你想要的最终结果是什么。如果你能展示出你想要的结果,那就更容易了。我现在重述一下:看看每个变量(A,B,C)是如何随着年份的变化而变化的。你确实得到了结果。你能解释一下这个函数的作用吗?也许没有办法做我一直在想的事情;我想最好的选择是关系数据库。不管怎样,我都会把你的答案记为解决办法。任何新的建议都很受欢迎。具体来说,这部分很奇怪:setDT%%>”[“(j=
:=(year,y))%%>%setkeyv(“name”)
setcolorder部分对我来说是新的;谢谢。至于其他部分,我看不出结果有什么不同。问题是所有帧都有完全相同的变量(示例中的3个)。此外,观察值正好是3(在本例中)。观察值(行)由“名称”表示col.它们是地区名称。@user10853setcolorder
函数来自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