2016-10-24 62 views
1

我是R新手,並試圖讓我的生活更輕鬆。我有一個數據框,其中有幾列,大小會有所不同。主要是一個「基因」列,其餘的將是不同患者/病情的表達數字數據。我想1)按每個數字列排序,2)創建僅包含'基因'列和每個數字列的文件。我試圖爲此生成一個for循環。使用內置的數據庫mtcars爲例,我生成了以下代碼:從數據框中排序和創建文本文件

mtcars 

for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    write.csv(twocolumns, paste0(i,'.txt'), row.names = F) 
} 

這將創建名稱爲1,2,3,4 ...'.txt'的文件。我如何製作這些名稱,使其與列具有相同的名稱?

另外我還沒有想出排序的一部分。到目前爲止,我已經試過這

mtcars <- mtcars[order(i),] 

(以下簡稱「twocolumns」前行的權利,但這種創造1列,2頁的文件。)

任何幫助將不勝感激!

回答

1

對於名稱問題,請將我替換爲colnames(twocolumns [2]) 由於您不關心rownames,因此我使用dplyr :: arrange按每個數據框的col1和col2進行排序。

mtcars 
require(dplyr) 
for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    twocolumns<-arrange(twocolumns,twocolumns[,1],twocolumns[,2]) 
    write.csv(twocolumns, paste0(colnames(twocolumns[2]),'.txt'), row.names = F) 
} 
+0

非常感謝。其實我只想按column2排序,所以我忽略了[,1],只保留了[,2]。另一個答案也適用,並且是不使用dplyr的替代方案。 –

+0

如果你在任何時間使用R,dplyr和其他圖書館成員(tidyverse)是你永遠不知道你需要的深深迷失的朋友。 – akaDrHouse

0

解決方案在基礎R:

for (i in 2:ncol(mtcars)) { 
    twocolumns <- data.frame(mtcars[,c(1,i)]) 
    write.csv(twocolumns[order(twocolumns[, 2]), ], paste0(colnames(mtcars)[i],'.txt'), row.names = F) 
} 

說明: 您要訂購您的dataframe基礎上,值的第二列,因此twocoloumns[order(twocolumns[, 2]), ]colnames(...)返回dataframe的列名稱向量。用colnames(...)[i]提取 t t條目。

+0

很棒的建議。我沒有想到在創建雙列之後整合排序(順序)。謝謝您的幫助!另一個答案也適用,但它使用dplyr。 –

相關問題