在R中,对两个匹配数据帧的每一行进行排序
问题描述:
我有两个匹配单元格的数据帧。在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
排序的版本相匹配?
在此先感谢!
答
我们可以使用lapply
与order
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"
感谢@akrun!您的解决方案适用于第1行,但不是其余。实际上,lapply(seq_len(nrow(v)),function(i)w [i,] [order(v [i,])])所做的列表是正确的。 'rbind'缺少什么东西? – emagar
@emagar对不起,忘了''unlist'部分。它现在应该工作。 – akrun