【问题标题】:Extracting columns from table Excel and merging them into another table从 Excel 表中提取列并将它们合并到另一个表中
【发布时间】:2011-08-28 03:08:25
【问题描述】:

我有许多(数百个)excel 文档,每个文档大约 10 列和 10 行。

我的目标是创建 单独的 txt 文件,其中包含第一列和第二列,然后是另一个包含第一列和第三列的文件,依此类推......对于 excel 的其余部分也是如此文件。

有没有办法在 Excel 中做到这一点?相反,是否可以在 R 中应用批处理命令来进入 Excel 文件(以前导出为 CSV 或类似的文件)以生成包含列配对的单独 txt 文件?

【问题讨论】:

  • 为了将所有文件保存到 csv,您可以使用类似于this location 中介绍的内容。那应该可以为您节省一些工作。您可能需要稍微调整一下 VBScript 代码,但想法就在那里。

标签: excel r csv


【解决方案1】:

随着文件的循环:

fnames<-list.files(pattern = "myFile*.csv")
fnums<-as.integer(sub(".csv", "", sub("myFile", "", fnames, fixed=TRUE), fixed=TRUE))

for(i in seq_along(fnums))
{
    dta<-read.csv(fnames[i])
    #halfnumcols<-dim(dta) %/% 2
    #for(j in (seq(halfnumcols)-1))
    #{
    #   write.csv(dta[,j*2+c(1,2)], paste("resultFile", i, ".", (j+1), ".csv", sep=""))
    #}
    #EDIT: instead of neighbor pairs, run over all pairs
    numcols<-dim(dta)[2]
    apply(combn(seq(numcols), 2), 2, function(curcomb){
        write.csv(dta[,curcomb)], paste("resultFile", i, ".", curcomb[1], ".", curcomb[2], ".csv"))
    })
}

【讨论】:

  • @Nick,我还修正了第一个 for 循环中的小错字,希望你不要介意。
  • @mpiktas。完全没有问题。感谢您指出。这将教会我在不测试的情况下发布“解决方案”(stackoverflow 不是最好的 R 编辑器)。无论如何,如果没有这些文件会很难......
  • @Nick,如果我没记错的话,第二次循环的第一次迭代会选择data.frame dta的零列,这不好。
  • @Nick,你可能想要halfnumcols&lt;-ncol(dta) %/% 2,但代码仍然不会遍历OP想要的所有组合,即1,1; 1,2; 1,3; ... 1,n; 2,3; 2,4; ... 2,n; ...等
  • @jarry - 考虑使用 XLConnect 或其他可以直接读取 xls 文件的包。将所有这些文件保存为 csv 会很痛苦:)
【解决方案2】:

这是在 R 中执行此操作的一种可能方法。这仅适用于一个 csv 文件,但它可以轻松适应许多文件。

##Simulate data
write.csv(matrix(rnorm(100),ncol=10),file="test.csv",row.names=FALSE)
data1<-read.csv("test.csv")

##Create the matrix containing the columns numbers for exporting. 
##Note the code is not nice. There is a function which gives this 
##matrix immediately, but I forgot it.
rr<-numeric()
for(i in 1:9) for(j in (i+1):10) rr<-rbind(rr,c(i,j))

##Write the columns in separate files
for(i in 1:nrow(rr)) write.csv(data1[,rr[i,]],file=paste("output1_",paste(rr[i,],collapse="_"),".csv",sep=""),row.names=FALSE)

此代码获取一个名为test.csv 的文件并生成output1_coln1_coln2.csv 类型的文件,其中coln1coln2 是列号。

对于许多文件,将其包装成一个函数并循环遍历所有 csv 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多