Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中按行排序数据_R_Sorting - Fatal编程技术网

如何在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

按升序对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   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