2016-07-25 87 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()函數將每行設置爲一個列表,然後在for循環內使用sink()輸出它。然後檢查您的工作目錄以查看文件File1.txtFile2.txtFile3.txtFile4.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

相關問題