【问题标题】:Merged data frame leaving some columns blank合并的数据框将某些列留空
【发布时间】:2019-01-13 22:27:15
【问题描述】:

我有两个数据框。第一个有很多乡村俱乐部的财务数据,另一个包含会员数据。这两个数据集共享一个名为“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")

【问题讨论】:

  • 这很奇怪。当我做dplyr::left_join(df_finance, df_member) 时,我得到了你想要的。你能展示你的代码吗?
  • 是的,请出示您的代码,否则我们无法回答。特别是您使用了dplyr::left_join,或base::merge,或其他什么?
  • 我正在使用 df_finance %>% left_join

标签: r merge left-join


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多