如何在R中按行排序数据
按升序对R中的数据帧按行排序 我有两个数据帧如何在R中按行排序数据,r,sorting,R,Sorting,按升序对R中的数据帧按行排序 我有两个数据帧 x <- data.frame("Age1"=c(21, 15, 16), "Age2"=c(14, 9, 11), "Age3"=c(5, 10, 8)) y <- data.frame("Age1"=c(10, 20, 9), "Age"=c(14, 10, 11), "Age3"=c(7, 14, 10)) x Age1 Age2 Age3 1 21 14 5 2 15 9 10 3 16
x <- data.frame("Age1"=c(21, 15, 16), "Age2"=c(14, 9, 11), "Age3"=c(5, 10, 8))
y <- data.frame("Age1"=c(10, 20, 9), "Age"=c(14, 10, 11), "Age3"=c(7, 14, 10))
x
Age1 Age2 Age3
1 21 14 5
2 15 9 10
3 16 11 8
y
Age1 Age Age3
1 10 14 7
2 20 10 14
3 9 11 10
最后我需要
x
Age1 Age2 Age3
1 5 14 21
2 9 10 15
3 8 11 16
y
Age1 Age2 Age3
1 7 14 10
2 10 14 20
3 10 11 9
有人能帮忙吗?我基于以下内容编写了一个小函数:
orderby 2 9 10 15
#> 3 8 11 16
orderby(y,by=x)
#>年龄1岁3岁
#> 1 7 14 10
#> 2 10 14 20
#> 3 10 11 9
我使用每行的秩来解决它:
x.rank <- apply(x, 1, rank)
x[] <- tapply(t(x), x.rank, c)
y[] <- tapply(t(y), x.rank, c)
x
# Age1 Age2 Age3
# 1 5 14 21
# 2 9 10 15
# 3 8 11 16
y
# Age1 Age2 Age3
# 1 7 14 10
# 2 10 14 20
# 3 10 11 9
x.rank谢谢!那很好用。我写下的例子实际上是我实际数据的简化版本:事实上,我在一个数据框中有48个变量的406个观察值。我并没有所有的值。有时数据中有NA。您知道如何调整函数,以便将缺少的值放在最后吗?(我是R新手)顺便说一句,如果你注意到一个答案是有效的,但你发现了另一个问题,那么通常最好就其他问题提出一个新问题,包括显示/再现该问题的数据。对不起,“y”中的最后一行是如何按升序排列的?它是基于x
的顺序排列的。最后一行的顺序是第3、2、1列。是的,我好像有打字错误。谢谢我据此更正了它,这可能是相关的:
order.pop
Age1 Age2 Age3
1 3 2 1
2 3 1 2
3 3 2 1
x
Age1 Age2 Age3
1 5 14 21
2 9 10 15
3 8 11 16
y
Age1 Age2 Age3
1 7 14 10
2 10 14 20
3 10 11 9
orderby <- function(x, by) {
out <- as.data.frame(t(sapply(1:NROW(by), function(i) x[i,][order(by[i,])])))
colnames(out) <- colnames(x)
out
}
orderby(x, by = x)
#> Age1 Age2 Age3
#> 1 5 14 21
#> 2 9 10 15
#> 3 8 11 16
orderby(y, by = x)
#> Age1 Age Age3
#> 1 7 14 10
#> 2 10 14 20
#> 3 10 11 9
x.rank <- apply(x, 1, rank)
x[] <- tapply(t(x), x.rank, c)
y[] <- tapply(t(y), x.rank, c)
x
# Age1 Age2 Age3
# 1 5 14 21
# 2 9 10 15
# 3 8 11 16
y
# Age1 Age2 Age3
# 1 7 14 10
# 2 10 14 20
# 3 10 11 9