【发布时间】:2019-04-17 04:33:34
【问题描述】:
我有一个 list 和 data.frames。一些data.frames 是冗余的,在非冗余行中,行(由id 列表示)不相同但重叠:
set.seed(2)
ids.1.2 <- paste0("id",sample(30,10,replace = F))
ids.3.4 <- paste0("id",sample(30,20,replace = F))
df.1 <- data.frame(id = ids.1.2,matrix(rnorm(100),10,10,dimnames = list(NULL,paste0("s.1.2:",1:10))))
df.2 <- df.1
df.3 <- data.frame(id = ids.3.4,matrix(rnorm(300),20,15,dimnames = list(NULL,paste0("s.3.4:",1:15))))
df.4 <- df.3
df.list <- list(df.1, df.2, df.3, df.4)
所以在这种情况下,df.1 和 df.2 是相同的,df.3 和 df.4 也是相同的,并且这两个集合在 ids 上相交:
"id6" "id21" "id17" "id5" "id24" "id11" "id12
是否有purrr::reduce 或类似的方法可以将此列表组合成一个具有唯一列和相交id 的data.frame?
我会使用:
purrr::reduce(df.list, dplyr::inner_join,by = "id")
如果所有data.frames 都有唯一的列。但在我的情况下,使用这个添加 .x, .y, ... 就足够了冗余列。
【问题讨论】:
-
也许删除
by = "id"并依赖默认行为,即使用所有具有通用名称的变量。