我有很多(数百个)Excel文档,大约有10列,每行10行。
我的目标是创建包含第一列和第二列的单独的 txt文件,然后创建包含第一列和第三列的另一个文件,依此类推......以及其他excel相同的文件文件。
有没有办法在Excel中执行此操作?相反,是否可以在R中应用批处理命令以进入Excel文件(先前导出为CSV或类型)以生成包含列配对的单独txt文件?
答案 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
类型的文件,其中coln1
和coln2
是列号。
对于许多文件将其包装到函数中并循环遍历所有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"))
})
}