我有两个数据帧。第一个包含大量的乡村俱乐部财务数据,另一个包含会员数据。这两个数据集共享一个称为“ Member_ID”的列,这是我将它们合并在一起的地方。但是,成员数据集包含我需要的标题为“ Alternate_ID”的列。但是,当我合并两个数据集时,“ Alternate_ID”列中留有很多NA值。
以下是我要执行的操作的示例:
财务数据:
Member_ID Purchase Purchase.Desc Date
1111 x x x
1111 x x x
1111 x x x
2234 x x x
2234 x x x
3355 x x x
3355 x x x
3355 x x x
会员数据:
Member_ID Alternate_ID
1111 9876
2234 7777
3355 5252
我想要什么:
Member_ID Purchase Purchase.Desc Date Alternate_ID
1111 x x x 9876
1111 x x x 9876
1111 x x x 9876
2234 x x x 7777
2234 x x x 7777
3355 x x x 5252
3355 x x x 5252
3355 x x x 5252
我得到的是什么
Member_ID Purchase Purchase.Desc Date Alternate_ID
1111 x x x 9876
1111 x x x -
1111 x x x -
2234 x x x 7777
2234 x x x -
3355 x x x 5252
3355 x x x -
3355 x x x -
这是我用于合并的代码。
df_finance <- transaction.csv %>% left_join(dates.csv, by = "Customer.Id")
df_finance2 <- df_finance[!is.na(df_finance$Date),]
df_finance3 <- df_finance2[!duplicated(df_finance2$Member.Id),]
colnames(df_member)[6] <- "Member.Id"
total_data <- df_member %>% left_join(df_finance3, by = "Member.Id")
答案 0 :(得分:1)
您的示例的有效版本:
# create data
df_finance <- data.frame(
member_id = c(rep(1111, 3), rep(2234, 2), rep(3355,3)),
descrip = rep("x", 8))
df_membership <- data.frame(
member_id = c(1111, 2234, 3355),
alt_id = c(9876, 7777, 522))
# with base R
merge(df_finance, df_membership, by="member_id", all.x=T)
member_id descrip alt_id
1 1111 x 9876
2 1111 x 9876
3 1111 x 9876
4 2234 x 7777
5 2234 x 7777
6 3355 x 522
7 3355 x 522
8 3355 x 522
# tidyverse style
dplyr::left_join(df_finance, df_membership, by="member_id")
member_id descrip alt_id
1 1111 x 9876
2 1111 x 9876
3 1111 x 9876
4 2234 x 7777
5 2234 x 7777
6 3355 x 522
7 3355 x 522
8 3355 x 522