2016-07-25 2 views
1

У меня есть читать CSV-файл в data.table, который следующим образом:Написать каждый data.table столбец отделить текстовые файлы в R

 Cat1 Cat2 Cat3 Country file_name 
1: A E B  Canada first 
2: C B   India  Second 
3: C    Canada third 
4: B    Ireland Fourth 
5: C A   India  fifth 
6: A C F  Canada  Sixth 

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

lapply(1:nrow(df), function(i) write.table(df[i], file= paste0("./TextFiles/", df[i, file_name], ".txt"), row.names = F, col.names = F, quote = F)) 

выход я получаю запись теперь следующим за «Sixth.txt» (к примеру):

A C F Canada Sixth 

Однако, я хочу, чтобы текст был следующим:

Cat1 
A 

Cat2 
C 

Cat3 
F 

Country 
Canada 

Есть ли способ, чтобы получить этот вывод без вложенности много lapply?

Попытка код:

lapply(df, function(i) i) 

дает выход:

$Cat1 
[1] "A" "C" "C" "B" "C" "A" 

$Cat2 
[1] "E" "B" "" "" "A" "C" 

$Cat3 
[1] "B" "" "" "" "" "F" 

$Country 
[1] "Canada" "India" "Canada" "Ireland" "India" "Canada" 

$file_name 
[1] "first" "Second" "third" "Fourth" "fifth" "Sixth" 

Итак, у меня есть чувство, что это возможно, чтобы получить имена столбцов перед содержимым, а также вставить строки перед каждой записью столбца. Однако я не могу найти способ сделать это.

+0

Вы хотите, чтобы быть распечатаны вертикально? как мы видим в консоли или это прекрасно, как каждая строка в отдельном текстовом файле с именами столбцов, как показано ниже? Дайте мне знать, если вы хотите внести некоторые изменения в результат ниже. –

+0

@ SowmyaS.Manian: Я не хочу, чтобы они были в виде таблицы, как в вашем ответе ниже. На самом деле, я буду импортировать текстовые файлы в RQDA. Поэтому мне нужно, чтобы строки печатались один за другим, как я показал в вопросе. – DotPi

+0

@ SowmyaS.Manian: Спасибо. Оно работает. Есть ли способ использовать данные в одном из столбцов в качестве имени файла, как я показал в вопросе? – DotPi

ответ

0

Используйте функцию apply(), чтобы сделать каждую строку в списке, а затем вывести ее с помощью sink() внутри for. Затем проверьте рабочий каталог, чтобы просмотреть файлы File1.txt, File2.txt, File3.txt и File4.txt. Имя файла может быть извлечена с помощью strsplit() и могут быть добавлены в выходной файл, используя Result[[i]]$file_name

library(data.table) 
    df <- data.frame(a=1:4,b=9:12,c=3:6,d=0:3) 
    df <- data.table(df) 

    df 
    # a b c d 
    # 1: 1 9 3 0 
    # 2: 2 10 4 1 
    # 3: 3 11 5 2 
    # 4: 4 12 6 3 

    Result = apply(df,1,as.list) 


for(i in 1:length(Result)){ 
sink(paste("File",i,".txt",sep="")) 
Result[[i]]$file_name <- strsplit(paste("File",i,".txt",sep=""),"\\.")[[1]][1] 
print(Result[[i]]) 
sink() 
} 

enter image description here

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