问:如何将数据框与唯一行和不同数量的共享列合并?
我有大量不同的调查受访者数据集
我想要组合成一个数据帧(或者tibble,如果
我们正在使用dplyr
)。每个受访者都是独一无二的没有受访者
出现在多个数据集中。
如果每个数据集都包含每个变量,那么这将是一项简单的任务 相同的列顺序,因为解决方案是:
combined <- rbind(df1, df2, df3, dfn)
可悲的是,这不是这些数据的状态。相反,每个数据集 有一个变量的受访者ID号,调查年份,国家 调查,以及不出现的不同数量的问题 在原始数据集中以相同的列顺序。他们确实有 但是,相同的变量名称。
如何将这些数据集合并到一个数据框中 a)每个受访者行都是唯一的,b)并非所有变量都出现在 所有数据集,以及c)并非所有变量都出现在同一列中 订单?
只有两个数据帧(实际上是三元组)的简单开始是:
df1 <-
tribble(~ rid, ~ a, ~ b, ~ c,
1, "a1", "b1", "c1",
2, "a2", "b2", "c2",
3, "a3", "b3", "c3")
df2 <-
tribble(~ rid, ~ a, ~ d, ~ c, ~ e,
4, "a4", "d1", "c4", "e1",
5, "a5", "d2", "c5", "e2",
6, "a6", "d3", "c6", "e3")
受访者由rid
标识。每个问题都已确定
通过其他变量之一。在此示例中,问题a
和
两次调查均询问c
,但b
仅在此调查中被询问
第一次调查,d
和e
仅在第二次调查中被询问
调查。
目标是让受访者拥有行和变量
当没有出现变量时填充NA
s的列是a
数据集。
我对基础R的merge
操作有点粗鲁
dplyr
*_join
次full_join(df1, df2, by = "rid")
次操作。我甚至不确定这是不是
正确的方法来解决这个问题,或者“合并”是什么
甚至是正确的动词。因此,也许是天真的,我试过了
# A tibble: 6 x 8
rid a.x b c.x a.y d c.y e
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 a1 b1 c1 <NA> <NA> <NA> <NA>
2 2 a2 b2 c2 <NA> <NA> <NA> <NA>
3 3 a3 b3 c3 <NA> <NA> <NA> <NA>
4 4 <NA> <NA> <NA> a4 d1 c4 e1
5 5 <NA> <NA> <NA> a5 d2 c5 e2
6 6 <NA> <NA> <NA> a6 d3 c6 e3
,产生:
rid a b c d e
<dbl> <chr> <chr> <chr> <chr> <chr>
1 1 a1 b1 c1 <NA> <NA>
2 2 a2 b2 c2 <NA> <NA>
3 3 a3 b3 c3 <NA> <NA>
4 4 a4 <NA> c4 d1 e1
5 5 a5 <NA> c5 d2 e2
6 6 a6 <NA> c6 d3 e3
相反,我想要的是:
list(df1, df2) %>%
Reduce(function(dtf1, dtf2) full_join(dtf1, dtf2, by="rid"), .)
我尝试了Simultaneously merge multiple data.frames in a list中的解决方案,但它给了我不可思议的结果:
# A tibble: 6 x 8
rid a.x b c.x a.y d c.y e
<dbl> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 1 a1 b1 c1 <NA> <NA> <NA> <NA>
2 2 a2 b2 c2 <NA> <NA> <NA> <NA>
3 3 a3 b3 c3 <NA> <NA> <NA> <NA>
4 4 <NA> <NA> <NA> a4 d1 c4 e1
5 5 <NA> <NA> <NA> a5 d2 c5 e2
6 6 <NA> <NA> <NA> a6 d3 c6 e3
哪个收益率:
a
我不知道为什么c
和CheckBox
没有正确合并。