好吧,这可能是一个有点难以解释,但挂我:合并名单列表,只保留未在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