【发布时间】:2019-05-20 21:54:04
【问题描述】:
我有一个包含 3 个数据框的列表和另一个包含 3 个 ID 向量的列表。我想通过检查第一个数据帧中的 ID 是否与第一个向量中的 ID 匹配来对每个数据帧进行子集化。第二个df和第二个向量以及第三个df和第三个向量相同。我可以使用 lapply 来完成,但我得到了一个包含 3 个列表的列表,每个列表都包含一个根据 ID 列表中的 3 个值中的每一个进行子集化的数据框。
我想获得一个包含 3 个数据帧的列表,第一个数据帧的第一个结果是第一个数据帧中的行在第一个 ID 向量中具有 id,第二个数据帧中的行在第二个数据帧中具有 id ID的第二个向量...等
n <- seq(1:20)
id <- paste0("ID_", n)
df1 <-data.frame(replicate(3,sample(0:10,10,rep=TRUE)))
df1$id <- replicate(10, sample(id, 1, replace = TRUE))
df2 <-data.frame(replicate(3,sample(0:10,7,rep=TRUE)))
df2$id <- replicate(7, sample(id, 1, replace = TRUE))
df3 <-data.frame(replicate(3,sample(0:10,8,rep=TRUE)))
df3$id <- replicate(8, sample(id, 1, replace = TRUE))
list_df <- list(df1, df2, df3)
list_id <- list(c("ID_13", "ID_1", "ID_5"), c("ID_1", "ID_17", "ID_4",
"ID_9"), c("ID_12", "ID_18"))
subset_df <- lapply(list_df, function(x){
lapply(list_id, function(y) x[x$id %in% y,])
})
感谢您的帮助!
【问题讨论】:
-
您在寻找
Map(function(x,y) x[x$id %in% y,],list_df,list_id)吗? -
abso-freaking-lutely!!非常感谢,我不知道这个功能!
-
另外,由于您使用的是
sample(),您应该使用set.seed()以获得更好的可重现示例。 -
感谢您的建议!
标签: r list dataframe subset lapply