列中的2列并在R中排序

时间:2015-03-22 23:16:42

标签: r list sorting

我们说我们有两个列表

x <- c(1, 3, 4, 2, 6, 5)
y <- c(12, 14, 15, 61, 71, 21)

我想要合并到一个列表中,以便我们有两列xy,值应该是相同的顺序。

x <- c(1, 3, 4, 2, 6, 5)
y <- c(12, 14, 15, 61, 71, 21)

有了列表后我想在y上对其进行排序,所以最终列表看起来像是

x <- c(1, 3, 4, 5, 2, 6)
y <- c(12, 14, 15, 21, 61, 71)

我是R的新手 我试过了list(x,y),但它似乎做了一个

list(1, 3, 4, 2, 6, 5,  12, 14, 15, 61, 71, 21)

所以我想知道有人可以帮助我。

2 个答案:

答案 0 :(得分:2)

您需要先将它们放在data.frame中,然后再使用order

x <- c(1, 3, 4, 2, 6, 5)
y <- c(-12, 14, 15, 61, 71, 21)
DF <- data.frame(x, y)

> DF[order(DF$y),]
  x   y
1 1 -12
2 3  14
3 4  15
6 5  21
4 2  61
5 6  71

答案 1 :(得分:1)

使用lapply保持列表:

x <- c(1, 3, 4, 2,6,5)
y <- c(12, 14,15,61,71,21)


l <- list(x = x, y = y)

## thelatemail
lapply(l, `[`, order(l$y))

# $x
# [1] 1 3 4 5 2 6
# 
# $y
# [1] 12 14 15 21 61 71

@thelatemail上面提供的短文本的更明确版本,但不保留名称:

lapply(seq_along(l), function(x) l[[x]][order(l$y)])

# [[1]]
# [1] 1 3 4 5 2 6
#
# [[2]]
# [1] 12 14 15 21 61 71

rapply

rapply(l, function(x) x[order(l$y)], how = 'list')

# $x
# [1] 1 3 4 5 2 6
# 
# $y
# [1] 12 14 15 21 61 71