Combining multifiles and add unique ID for each of them
我是R新手。在合并数据时遇到问题,希望有人帮助解决它。
假设我有两个 CSV 文件,例如 A.csv 和 B.csv,位于路径"C:\\\\Users\\\\Public\\\\A"。
它们看起来像这样:
A.csv
X1,1,2,3,2
X2,1,2,2,3
X3,1,3,4,2
B.csv
X1,2,4,3
X2,2,2,3
X3,3,3,4
然后我尝试将它们组合起来,并用以下函数转置它们。它们是在这里由 Ricardo Oliveros-Ramos 和在这里由 Tony Cookson 创建的。
1. 首先,我创建函数
中的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | read.tcsv = function(file, header=TRUE, sep=",", ...) { n = max(count.fields(file, sep=sep), na.rm=TRUE) x = readLines(file) .splitvar = function(x, sep, n) { var = unlist(strsplit(x, split=sep)) length(var) = n return(var) } x = do.call(cbind, lapply(x, .splitvar, sep=sep, n=n)) x = apply(x, 1, paste, collapse=sep) out = read.csv(text=x, sep=sep, header=header, ...) return(out) } |
2。然后我使用
1 2 3 4 5 6 7 8 | multrbind.fill = function(mypath){ filenames=list.files(path=mypath, full.names=TRUE) datalist = lapply(filenames, function(x){ read.tcsv(file=x,header=T) } ) Reduce(function(x,y) {plyr::rbind.fill(x,y)}, datalist) } |
2015 1 1 1
2016 2 2 3
2017 3 2 4
2018 2 3 2
2015 2 2 3
2016 4 2 3
2017 3 3 4
2015 A 1 1 1
2016 A 2 2 3
2017 A 3 2 4
2018 A 2 3 2
2015 B 2 2 3
2016 B 4 2 3
2017 B 3 3 4
谁来帮帮我!?提前致谢。
感谢 TJ83 帮我修正功能。根据 TJ83 的评论,我添加了一个名为 ID 的标识符列。这是我的完整功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | read.tcsv = function(file, header=TRUE, sep=",", ...) { n = max(count.fields(file, sep=sep), na.rm=TRUE) x = readLines(file) .splitvar = function(x, sep, n) { var = unlist(strsplit(x, split=sep)) length(var) = n return(var) } x = do.call(cbind, lapply(x, .splitvar, sep=sep, n=n)) x = apply(x, 1, paste, collapse=sep) out = read.csv(text=x, sep=sep, header=header, ...) out$ID<-tools::file_path_sans_ext(basename(file)) return(out) } |
1) 如果您只有 2 个数据集,那么最快的方法是在转换后但在绑定行之前在 A 和 B 数据集上添加 ID 列。
1 2 3 | Dataset_A$ID<-"A" Dataset_B$ID<-"B" # Where Dataset_X is the name of your imported transformed datasets. |
2) 你能展示你使用的确切代码吗?如果您只有 2 个数据集,我认为您创建的代码可以大大简化。如果您对简化感兴趣,请向我们提供以下 2 个 dput 语句的输出:
1 2 3 4 | A<-read.csv("A-dataset") B<-read.csv("B-dataset") dput(A) dput(B) |