2015-10-11 4 views
0

Предположим, у меня есть 9 файлов .txt в том же каталоге. price1.txt price2.txt price3.txt - таблица цен из разных мест, строка и имя колокола - долгота и высота соответственно. year4,5,6.txt и dis7,8,9.txt - таблица года и скидка от того же места, что и в тексте 1.Как объединить несколько текстовых файлов в один файл data.frame?

Я хочу создать новый кадр данных, где каждый столбец представляет собой список цены, года, скидка от текста 1-9 с соответствующей долготой и отношением.

Я был в состоянии использовать

mydata = list.files(pattern = "\\.txt$") 

читать имена файлов

Я был в состоянии использовать

a = lapply(mydata, read.table, header = TRUE) 

, чтобы соединили каждый файлы.

Но как я могу извлечь таблицу из разных текстовых файлов переменной и поместить их в столбец? Трудная часть здесь заключается в том, что все имена файлов различны, поэтому я не могу найти простой способ закодировать список файлов.

ответ

0

Вы можете прочитать в цене, году, текстовые диск файлы в свои dataframes затем слияния:

pricelist <- list.files(pattern = "price-.*\\.txt") 
pricedf <- lapply(pricelist, read.table, header=TRUE) 

yearlist <- list.files(pattern = "year-.*\\.txt") 
yeardf <- lapply(yearlist, read.table, header=TRUE) 

disclist <- list.files(pattern = "disc-.*\\.txt") 
discdf <- lapply(disclist, read.table, header=TRUE) 

finaldf <- merge(pricedf, yeardf, by=c("longitude", "altitude")) 
finaldf <- merge(finaldf, discdf, by=c("longitude", "altitude")) 

Для обобщенной версии в for цикле:

items <- c("price", "year", "disc") 

for (item in items) { 
    assign(paste0(item, "list"), list.files(pattern=paste0(item, "-.*\\.txt"))) 
    assign(paste0(item, "df"), lapply(get(paste0(item, "list")), read.table, header=TRUE)) 
} 

finaldf <- merge(pricedf, yeardf, by=c("longitude", "altitude")) 
finaldf <- merge(finaldf, discdf, by=c("longitude", "altitude")) 
+0

Спасибо за помощь, но как делает() работу? Моя долгота и высота - это список чисел в первой строке и столбце, могу ли я по-прежнему использовать функцию by()? – user3697665

+0

В [merge()] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/merge.html]), 'by' - это объединение столбцов между кадрами данных. Если они присутствуют в обоих, вы используете общие 'by' или' by.x' и 'by.y' для определенного df. Я не уверен, что вы имеете в виду первый ряд и столбец. Есть ли заголовок столбца с строками данных? Измените свой пост, чтобы отобразить макет данных (просто скопируйте и вставьте образец из файла txt и используйте формат кода: '{}'). – Parfait

+0

Спасибо! Но второй присваивать(), похоже, не работает для чтения. table(), paste0 (item, «list») делают имя файла заканчивается «list», но read.table() не может распознать этот символ, когда я печатаю переменную вручную, read.table() распознает ее. – user3697665

Смежные вопросы