[英]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.