从表Excel中提取列并将它们合并到另一个表中

时间:2011-05-18 10:28:53

标签: excel r csv

我有很多(数百个)Excel文档,大约有10列,每行10行。

我的目标是创建包含第一列和第二列的单独的 txt文件,然后创建包含第一列和第三列的另一个文件,依此类推......以及其他excel相同的文件文件。

有没有办法在Excel中执行此操作?相反,是否可以在R中应用批处理命令以进入Excel文件(先前导出为CSV或类型)以生成包含列配对的单独txt文件?

2 个答案:

答案 0 :(得分: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文件。

答案 1 :(得分: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"))
    })
}