我想根據資料框中匹配相同名稱的行數復制/重復串列。
例如,給定我的串列和資料框
mylist <- list(A = c(1,2,5,6), B = c(2,4,6,5), C = c(2,4,2,35))
> mylist
$A
[1] 1 2 5 6
$B
[1] 2 4 6 5
$C
[1] 2 4 2 35
mydf <- as.data.frame(c("A", "A", "A", "B", "B", "C"))
colnames(mydf) <- "Freq"
> mydf
Freq
1 A
2 A
3 A
4 B
5 B
6 C
我希望此輸出從 mylist A 重復 3 次,因為它在 mydf 中有 3 行,B 重復 2 次,因為它在 mydf 中有接下來的 2 行,C 重復 1 次,因為它在 mydf 中有下 1 行mydf:
desired.output <- list(A = c(1,2,5,6), A = c(1,2,5,6), A = c(1,2,5,6), B = c(2,4,6,5), B = c(2,4,6,5), C = c(2,4,2,35)
> desired.output
$A
[1] 1 2 5 6
$A
[1] 1 2 5 6
$A
[1] 1 2 5 6
$B
[1] 2 4 6 5
$B
[1] 2 4 6 5
$C
[1] 2 4 2 35
我嘗試使用該rep
函式,但所有結果都為 NULL 物件。
attempt1 <- rep(mylist[[]], times=as.vector(mydf$Freq))
attempt2 <- rep(mylist[[]], times = match(mydf$Freq, names(mylist)))
attempt3 <- rep(mylist[[]], times = length(match(mydf$Freq, names(mylist))))
最終,我的目標是讓 mylist 包含與 mydf 相同數量的專案,并且根據 mydf 中的樣本大小復制每個組(A、B、C)。
uj5u.com熱心網友回復:
我們可以使用mydf
頻率資料為我們做選擇
mylist[mydf$Freq]
$A
[1] 1 2 5 6
$A
[1] 1 2 5 6
$A
[1] 1 2 5 6
$B
[1] 2 4 6 5
$B
[1] 2 4 6 5
$C
[1] 2 4 2 35
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535402.html
標籤:r