2017-03-01 25 views
0

我是一位新的R用戶。如何爲數據框中的每個列創建多個文本文件並保留第一列?

我有一個包含503列的excel文件。第一列表示組,而第二列直到最後一列是數字特徵。

Groups  length width ellip ... nth_trait 
AAA   2   1  7   1 
BBB   4   5  6   0 
CCC   1   6  3   5 

我想創建文本文件在一個運行的每個特徵的文件名基於特質。代碼如下所示:

raw <- read_excel("raw_data.xlsx", sheet = 1) 
raw_df <- as.data.frame(raw) 

for (i in names(raw_df)) { 
raw_file <- paste(i, ".txt", sep = "") 
write.table(raw_df[[i]], raw_file, sep = "\t", quote = F, row.names = F, col.names = T, append = F) 
} 

輸出包含503個文本文件。每個文件只包含一個與數據框中每列對應的列。

但我期望每個文本文件的輸出必須由第一列(組名),然後性狀,如以下所列:

length.txt 

Groups  length 
AAA   2 
BBB   4 
CCC   1 

width.txt 

Groups  width 
AAA   1 
BBB   5 
CCC   6 

我應如何修改代碼?請幫助。

+0

組似乎不是行名稱,而是一個單獨的列。如果這是真的,你可以用'raw_df [[c(1,i)]]'替換'raw_df [[i]]'。如果它確實存儲在行名稱中,則將'row.names = F'更改爲'row.names = TRUE'。 – lmo

+0

是的,這些組在單獨的列。我編輯了這個問題。正如你所建議的那樣,我嘗試用raw_df [[c(1,i)]替換raw_df [[i]],但是我得到這個錯誤:.subset2(x,i,exact = exact)中的錯誤:no這樣的索引在第1級。 – lala

+0

當我運行iris [[c(1,i)]]'其中'i = 5'時,它返回一個單獨的值,而不是一列。 –

回答

1

在你write.table功能,請嘗試使用cbind加入與任何列中的循環引用的第一列:

write.table(cbind(raw_df[1], raw_df[i]), raw_file, sep = "\t", quote = F, row.names = F, col.names = T, append = F)

這應該工作,在此基礎上例如:

lapply(1:5, function(x){cbind(iris[1],iris[i])})

+0

這個伎倆。謝謝。 – lala

相關問題