2016-03-03 89 views
1

我有兩個匹配單元格的數據幀。在R中,對兩個匹配數據幀的每一行進行排序

v <- data.frame(c1=c(30,15,3), c2=c(10,25,2), c3=c(20,35,4)) 
    w <- data.frame(c1=c("thirty","fifteen","three"), c2=c("ten","twenty-five","two"), c3=c("twenty","thirty-five","four")) 

我需要排序的每一行都不訴諸(慢)循環。排序v(這將決定其他數據幀的順序也是如此)我使用的方法推薦here

v.sorted <- t(apply(v, 1, sort)) 

如何操作數據幀w使得它的v排序的版本相匹配?

在此先感謝!

回答

1

我們可以使用lapplyorder

do.call(rbind, lapply(seq_len(nrow(v)), function(i) 
    as.character(unlist(w[i,])[order(unlist(v[i,]))]))) 
#  [,1]  [,2]   [,3]   
#[1,] "ten"  "twenty"  "thirty"  
#[2,] "fifteen" "twenty-five" "thirty-five" 
#[3,] "two"  "three"  "four"  
+0

感謝@akrun!您的解決方案適用於第1行,但不是其餘。實際上,lapply(seq_len(nrow(v)),function(i)w [i,] [order(v [i,])])所做的列表是正確的。 'rbind'缺少什麼東西? – emagar

+1

@emagar對不起,忘了''unlist'部分。它現在應該工作。 – akrun