簡體   English   中英

R:有內置的功能可以對列表進行排序嗎?

[英]R: are there built-in functions to sort lists?

在RI中產生了以下列表L

>L
[[1]]
[1] "A" "B" "C"  

[[2]]
[1] "D"  

[[3]]
[1] NULL

我想操縱到達數據庫df的列表L

>df
    df[,1] df[,2]
       "A"      1 
       "B"      1
       "C"      1 
       "D"      2

第2列給出第1列中相應元素在列表L中的位置。我的問題是:是否有內置R函數可以快速執行此操作? 我可以使用“蠻力”來做,但是當我考慮更大的列表時,我的解決方案無法很好地擴展。

謝謝大家!

由於您的NULL值,您會收到warning ,但是如果您給列表項names則可以使用stack

L <- list(c("A", "B", "C"), "D", NULL)
stack(setNames(L, seq_along(L)))
#   values ind
# 1      A   1
# 2      B   1
# 3      C   1
# 4      D   2
# Warning message:
# In stack.default(setNames(L, seq_along(L))) :
#   non-vector elements will be ignored

如果warning使您不滿意,您當然可以在非NULL元素上運行stack ,但是請在命名列表元素之后執行此操作,以使“ ind”列反映正確的值。

為了清楚起見,我將分兩步顯示:

names(L) <- seq_along(L)
stack(L[!sapply(L, is.null)])

同樣,如果你已經得到擺脫的NULL列表元素,你可以使用melt從“reshape2”。 您不會簡短地獲得任何收益,也不確定您是否會獲得效率的收益,但是我想我可以選擇共享。

library(reshape2)
names(L) <- seq_along(L)
melt(L[!sapply(L, is.null)])

Ananda的答案似乎比這個要好,但我還是會提出來:

> cbind(unlist(L), rep(1:length(L), sapply(L, length)))
     [,1] [,2]
[1,] "A"  "1" 
[2,] "B"  "1" 
[3,] "C"  "1" 
[4,] "D"  "2"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM