首页 > 解决方案 > 当有多个“键”时如何合并数据集

问题描述

我正在尝试将两个数据集合并到R. 作为参考,键是一个雇员ID number。在第一个数据集中,A键是唯一的,每个变量对应于ID number。在下一个数据集中,我们有相同的ID number,但是数据是指某人被提升的次数。因此,ID number对于每个单独的移动重复多次。我想将两者合并,这样我就只有一个ID number,其中包含有关每个动作的信息。

我是新手,我已经尝试过包中的join功能,tidy verse我正在尝试找到一种在重复密钥时加入的方法。

Example of the datasets
[A]
ID     "Status"
1.     Y
2.     N
3.     Y
4.     N
5.     Y

[B]

ID    "Movement"
1      AB
1      BC
2.     AB
3.     AA
3.     AB
3.     BC
4.     AA
5.     AB
5.     BA

我希望它最终看起来像这样

ID    "STATUS".  "Movement 1" "Movement 2" Movement 3" .....
1         Y           AB          BC          NA
2         N           AB          NA          NA
3         Y           AA          AB          BC
4         N           AA          NA          NA
5         Y           AB          BA          NA

谢谢你的支持!

标签: rmergetidyversedata-manipulation

解决方案


一个选项是通过“ID”连接两个数据集,然后spread在创建按“ID”分组的序列列后将其转换为“宽”格式

library(tidyverse)
left_join(df2, df1) %>%
   group_by(ID) %>% 
   mutate(col = str_c("Movement", row_number())) %>% 
   spread(col, Movement)
# A tibble: 5 x 5
# Groups:   ID [5]
#     ID Status Movement1 Movement2 Movement3
#  <dbl> <chr>  <chr>     <chr>     <chr>    
#1     1 Y      AB        BC        <NA>     
#2     2 N      AB        <NA>      <NA>     
#3     3 Y      AA        AB        BC       
#4     4 N      AA        <NA>      <NA>     
#5     5 Y      AB        BA        <NA>     

数据

df <- structure(list(ID = c(1, 2, 3, 4, 5), Status = c("Y", "N", "Y", 
"N", "Y")), class = "data.frame", row.names = c(NA, -5L))

df2 <- structure(list(ID = c(1, 1, 2, 3, 3, 3, 4, 5, 5), Movement = c("AB", 
"BC", "AB", "AA", "AB", "BC", "AA", "AB", "BA")), 
  class = "data.frame", row.names = c(NA, 
-9L))

推荐阅读