2013-03-21 3 views
3

Это часть более короткой истории сценариев, входной сигнал для R - путь, разделенный точкой с запятой, в расположение моих текстовых файлов. Все текстовые файлы имеют следующий формат:Добавить столбцы в цикле for R

File1:

Name1 3 
Name2 4 
Name3 55 

File2:

Name1 4 
Name2 33 
Name3 102 

file3:

Name1 12 
Name2 2 
Name5 33 

Вот пример:

cond1<-'/User/Desktop/File1;/User/Desktop/File2;/User/Desktop/File3' 

#separates the elements 
normalList<-strsplit(cond1, ";") 

#now you can access each element 
nor<-unlist(normalList) 

baseNorm<-vector("list", length(nor)) 
dirNorm<-vector("list", length(nor)) 
pathNorm<-vector("list", length(nor)) 
Norm<-vector("list", length(nor)) 
new<-vector("list", length(nor)) 
for (i in 1:length(nor)) 
{ 
    baseNorm[[i]] <- basename(nor[i]) 
    dirNorm[[i]]<-dirname(nor[i]) 
    pathNorm[[i]]<-paste(dirNorm[[i]], baseNorm[[i]], sep="/") 
    Norm[[i]]<-read.delim(pathNorm[[i]], header=F) 

} 

В примере здесь вход R содержит 3 файла, однако мне нужно, чтобы скрипт был достаточно гибким, чтобы он мог работать для любого количества переданных файлов, следовательно, попытка с циклом for. BIG IDEA: 1) Получить путь к определенному файлу для всех файлов. 2) Загрузите текстовые файлы в R 3) Создайте новый файл, содержащий общий первый столбец (Name1, Name2, Name3). Все последующие столбцы в этом новом файле соответствуют 2-й колонке File1, Файл2, file3, file4 и т.д. По существу, мне нужно создать мастер-файл:

Name1 3 4 55 
Name2 4 33 102 
Name3 12 2 33 

Я уверен, что есть намного проще решение даже для кода, который у меня уже есть, поскольку со всеми [[]] я даже не знаю, как начать писать функцию, которая создает главный файл. Я только начал использовать R, поэтому любой вклад является ценным опытом обучения, и спасибо заранее!

+0

'list.files' (см. Шаблон аргумента),' lapply' и 'do.call' являются ключевыми словами. –

ответ

3

Что-то вроде этого ??? :

fileNames <- list.files() 

master1 <- read.csv(file = fileNames[1], sep = ";", header = T)  

for(i in 2:length(fileNames)){  
file1 <- read.csv(file = fileNames[i], sep = ";", header = T) 
master1$newCol1 <- file1[,2] 
colnames(master1)[ncol(master1)] <- paste("file",i,sep = "") 
} 
+1

Почему бы не использовать '[[' вместо '$', тогда вам не нужно гадать с 'colnames <-' – mnel

+0

Я не знаком с '[['. Что оно делает? – screechOwl

+0

См. '? '[[' 'И' library (fortunes); fortune (312) ' – mnel

1

Я понимаю, что, возможно, был немного расплывчатым. Вот какой-то полу-псевдокод, который может помочь.

my.files <- list.files(pattern = ".csv") 
imported.files <- sapply(my.files, read.csv, ...) # additional paramaters for proper import 
out <- do.call("cbind", imported.files) 
Смежные вопросы