2013-05-06 20 views
1

目前,我有類似以下關於獨立分揀每一行的表

ID  grade-1   grade-2   grade-3 
1 0.004461027 0.002740424 0.002955164 
2 0.055690775 0.045791653 0.17440305 
3 0.048901623 0.042439538 0.027306325 
4 0.20013265 0.0637944 0.081362503 

我讀表作爲

test.matrix<-data.frame(read.table("test.csv",sep=",",header=T)) 

我想產生一個新的表,其中每一csv文件行有序

ID  highest grade   the second grade   the third grade 
1 grade-1:0.004461027 grade-3:0.002955164  grade-2:0.002740424 
2 grade-3:0.17440305  grade-1:0.055690775 grade-2:0.045791653 
3 grade-1:0.048901623 grade-2:0.042439538 grade-3:0.027306325 
4 grade-1:0.20013265 grade-3:0.081362503  grade-2:0.0637944  

我該如何排序每一行?並且爲了產生輸出,如何將一個字符(例如,grade-1)和數字值(例如,0.004461027)放在單個條目中,例如grade-1:0.004461027

回答

1
t(apply(DF,1,function(x) { 
    temp <- sort(x[-1],decreasing=TRUE) 
    res <- c(x[1],paste(names(temp),temp,sep=": ")) 
    names(res) <- c("ID",  "highest grade",   "the second grade",   "the third grade") 
    res 
         })) 

    ID highest grade   the second grade  the third grade  
[1,] "1" "grade.1: 0.004461027" "grade.3: 0.002955164" "grade.2: 0.002740424" 
[2,] "2" "grade.3: 0.17440305" "grade.1: 0.055690775" "grade.2: 0.045791653" 
[3,] "3" "grade.1: 0.048901623" "grade.2: 0.042439538" "grade.3: 0.027306325" 
[4,] "4" "grade.1: 0.20013265" "grade.3: 0.081362503" "grade.2: 0.0637944" 
+0

在函數中,temp < - sort(x [-1],decrease = TRUE)我可以知道[-1]代表什麼嗎?目前,該功能直接在屏幕上顯示「res」?有沒有辦法將res保存到csv文件? – user288609 2013-05-07 01:06:19

+0

我想明白它是如何工作的,謝謝。 – user288609 2013-05-07 02:36:40

2

也許:

res <- t(apply(dfrm[ 2:4], 1, 
        function(row) paste0("grade-", 1:3, ":", rev(sort(row))))) 

[R返回列順序矩陣的結果,所以,當功能得到應用於行,你需要調換,結果得到序「形」。爲了把ID值回,cbind到ID:

cbind(dfrm[, "ID", drop=FALSE], res) 

我把降等於假在那裏保持的第一個參數的數據框類,所以其結果將是一個data.frame。否則,res-object是一個矩陣,dfrm [,「ID」]或dfrm $ ID將是向量,並且cbind結果將是一個矩陣。

+0

這兩個都是對的。固定。 – 2013-05-06 18:35:15