如何在单个数据集中合并100个csv文件?行数和列数不同。
每个csv文件都有不同的列和行。 我尝试了很多方法来合并但是我失败了如下。 你能给我一些建议吗?
第一次尝试:
files=list.files(pattern=".csv$")
files
mydata1=lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE))
mydata2 <- function(x) {
x.diff <- setdiff(colnames(x), colnames(y))
y.diff <- setdiff(colnames(y), colnames(x))
x[, c(as.character(y.diff))] <- NA
y[, c(as.character(x.diff))] <- NA
return(mydata2)
}
merdata= merge(lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE)), files, by=c("location","yearmon", "MME"), all=T)
##data.frame中的错误(列表(yearmon = c(&#34; 1983-01&#34;,&#34; 1983-02&#34;,&#34; 1983-03&#34;,: 参数意味着不同的行数:278,398
我有1253个csv文件。我想将这些文件设置为一个数据集。 每个文件的相同列名应该是相同的名称,而不是&#39; x.column&#39;像这样。我附上了样本结果文件。你可以很容易地理解我想做什么。我向您展示了2个示例文件,如下所示。 &#34; dput(mydata1 [1:2])&#34;编码数据如下。最终目标是将1253个文件合并到一个数据集中。 非常感谢你的帮助。
.Names = c("yearmon", "E01", "E02", "E03", "E04", "E05",
"E06", "E07", "E08", "E09", "E10", "E11", "E12", "E13", "E14",
"E15", "E16", "E17", "E18", "E19", "E20", "MME", "location"), class = "data.frame", row.names = c(NA,
-398L)),
.Names = c("yearmon", "E01",
"E02", "E03", "E04", "E05", "E06", "E07", "E08", "E09", "E10",
"MME", "location"), class = "data.frame", row.names = c(NA, -278L
)))
#
Sample Result iefile_1 [iefile_2]
答案 0 :(得分:1)
由于数据集共享相同的列,因此您可以将方法基于行绑定rbind()
。 rbind()
是一个按行组合向量,矩阵或数据帧的函数。您应该创建数据集列表并使用它们提供函数。
rbind(dt1,dt2,.., dtn)
dt1.csv:
Lett Color Num
A w 0.4
A b -0.6
B b 1.2
C w -0.70
dt2.csv:
Lett Color Num
D w 2.89
D b 0.06
D b 0.62
D w 0.5
D w 9.3
B w -2.3
A b -0.1
从文件中读取数据:
> dt1 <- read.csv("dt1.csv", header=T, sep=",")
> dt2 <- read.csv("dt2.csv", header=T, sep=",")
> dt_merged <- rbind(dt1, dt2)
> dt_merged
Lett Color Num
A w 0.4
A b -0.6
B b 1.2
C w -0.70
D w 2.89
D b 0.06
D b 0.62
D w 0.5
D w 9.3
B w -2.3
A b -0.1
答案 1 :(得分:0)
尝试这样的事情:
install.packages(c("dplyr", "tidyr"), dependencies = T)
require("dplyr")
require("tidyr")
files <- list.files(pattern=".csv$")
mydata1 <- lapply(files, function(x) read.csv(x, stringsAsFactors = FALSE))
mydata2 <- lapply(mydata1, function(df) {
df %>% gather(e_num, e_value, -yearmon, -MME, -location)
}) %>% bind_rows