我们说我们有两个列表
x <- c(1, 3, 4, 2, 6, 5)
y <- c(12, 14, 15, 61, 71, 21)
我想要合并到一个列表中,以便我们有两列x
和y
,值应该是相同的顺序。
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)
所以我想知道有人可以帮助我。
答案 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