好吧,這可能是一個有點難以解釋,但掛我:合併名單列表,只保留未在R有高階列表中的元素
假設我有一個列表的列表,它由相同的元素,雖然越來越少,因爲我們中的元素分組「升級」:
level.list <- list(
list(1,2,3,4,5,6,7,8,9,10,11,12,13,14), # base level
list(c(1,2,3),c(4,5),c(6,7),c(13,14)), # level 2 groups
list(c(1,2,3,6,7),c(4,5,9)), # level 3 groups
list(c(4,5,9,12)) # level 4 groups
)
因此,列表中的每個列表包含一些從該列表中的元素之前,將它們合併在更大的羣體中。
問題是,如果列表中的某個組不在列在「更高級別」列表中,那麼該組是最後一個列表。如果一個元素出現在更高級別的列表中,那麼在級別2 [6,7]合併的元素組合併到級別3的元素組[1,2,3],然後包含2級別的組[6,7]和另一個包含[1,2,3]的2級組不應該成爲最終名單的一部分,因爲兩者都存在於共享組[1,2,3,6,7]中,而這被賦予優先權。
列表元素是數據集中的索引,它將觀察結果分組在較高和較高的級別。所以實際上,這是「中途完成」列表,它創建了一個分組變量。
我根本不知道該怎麼做,找到一種方法將第一個列表與其他列表合併,從列表中刪除「低位」分組。所以我得到一個矩陣/ df,其中包含一個元素所在的「最高級別」,以及第二個數字,告訴我某個給定元素處於該級別的哪個組,因此矩陣/ df應該是這樣的:
group.matrix <- matrix(c(
1 , "3.1" ,
2 , "3.1" ,
3 , "3.1" ,
4 , "4.1" ,
5 , "4.1" ,
6 , "3.1" ,
7 , "3.1" ,
8 , "1.1" ,
9 , "4.1" ,
10 , "1.2" ,
11 , "1.3" ,
12 , "4.1" ,
13 , "2.2" ,
14 , "2.2"
),
nrow = 14, ncol = 2, byrow = TRUE)
colnames(group.matrix) <- c("first.level","group")
在這裏,元素有點有序,這是不是在我的現實生活中的數據。希望我的問題對你很清楚。而且你可以幫助我!我有兩個星期的時間來交換我的masterthesis,我只是想着這個問題,但我需要解決這個問題,以便分析論文中的一些重要內容:/。
謝謝你的時間。
編輯:有關於這個問題,並相應地在玩具示例
'庫(tidyverse); level.list%>%map2_df(seq_along(。),〜data.frame(x = unlist(.x),i = .y))%>%group_by(x)%>%summarize(i = max(i) )' – alistaire
謝謝!我已經更新了這個問題,忘記了一些重要的東西,在MrFlicks的回答中看到我的評論(或者再次閱讀更新後的問題) 只是好奇,爲什麼不把它作爲答案? =) – emilBeBri