Извлечение столбцов из таблицы Excel и объединение их в другую таблицу - PullRequest
1 голос
/ 18 мая 2011

У меня есть много (сотни) документов Excel, содержащих около 10 столбцов и 10 строк в каждом.

Моя цель - создать отдельных текстовых файлов, содержащих первый и второй столбцы, затем другой файл, содержащий первый и третий и т. Д., И то же самое для остальных файлов Excel .

Есть ли способ сделать это в Excel? Скорее, возможно ли применить пакетную команду в R, чтобы попасть в файлы Excel (ранее экспортированные в CSV или тому подобное) для создания отдельных текстовых файлов, содержащих пару столбцов?

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Вот один из возможных способов сделать это в 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 голос
/ 18 мая 2011

И с перебиранием файлов:

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"))
    })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...