How to sort list by first element

后端 未结 3 1585
鱼传尺愫
鱼传尺愫 2021-01-18 02:41

I have a list of vectors looking like:

[[1]]
[1] 2 1.0 3.0

[[2]]
[1] 3 3 3

[[3]]
[1] 1 3.0 1.0

and I want it to be sorted by first elemen

相关标签:
3条回答
  • 2021-01-18 03:01

    I assumed that your example should not have resulted in putting the second element of your list in the first element of the result? If this is right, you can use lapplyto do what you want:

    L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
    L
    lapply(L, sort)
    

    If you are ordering by the first value in each vector of you list, then this can be done in the following way:

    L[order(sapply(L, function(x) x[1], simplify=TRUE), decreasing=TRUE)]
    
    L
    [[1]]
    [1] 3 3 3
    
    [[2]]
    [1] 2 1 3
    
    [[3]]
    [1] 1 3 1
    

    From your example, it looks like you want the decreasing order.

    0 讨论(0)
  • 2021-01-18 03:15

    Similar to @MarkintheBox.

    L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
    
    L[order(sapply(L,head,1),decreasing=T)]
    # [[1]]
    # [1] 3 3 3
    # 
    # [[2]]
    # [1] 2 1 3
    # 
    # [[3]]
    # [1] 1 3 1
    
    0 讨论(0)
  • 2021-01-18 03:19

    Same as the others but using Map to extract the first element of each vector.

    L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
    idx <- as.numeric(Map(function(vec){vec[1]},L))
    L[order(idx, decreasing=TRUE)]
    
    0 讨论(0)
提交回复
热议问题