【问题标题】:merge data frame only keep one observation合并数据框只保留一个观察值
【发布时间】:2015-03-01 14:57:30
【问题描述】:

我有两个数据框:客人和地址。

“guests”包含人名和相应的人级数据。人们按家庭 ID 进行组织,这样同一个家庭中的多个人共享一个家庭 ID,如下所示:

## Guests data frame looks like this:
Family.ID <- c(1,1,1,2,2,3,3,3,4,4)
Names <- c("Person_A", "Person_B", "Person_C", "Person_D", "Person_E",
           "Person_F", "Person_G", "Person_H", "Person_I", "Person_J")
list <- c("A", "A", "A", "A", "A", "B", "B", "B", "C", "C")
guests <- data.frame(Family.ID, Names, list)

“addresses”包含家庭及其地址,也由家庭 ID 标记,如下所示:

## Addresses data frame looks like this:
family <- c("Person A, B, & C", "Person D & E", "Person F, G, & H", "Person I & J")
ID <- c(1,2,3,4)
address <- c("family 1's address", "family 2's address", "family 3's address", "family 4's address")
addresses <- data.frame(ID, family, address)
names(addresses) <- c("Family.ID", "Family", "Address")

我的目标是将变量 guest$list 添加到“addresses”中。我尝试像这样合并“guests”和“addresses”:

both <- merge(guests, addresses, by = "Family.ID")

从合并中,我得到:

  Family.ID Names     list  Family              Address
        1   Person_A    A   Person A, B, & C    family 1's address
        1   Person_B    A   Person A, B, & C    family 1's address
        1   Person_C    A   Person A, B, & C    family 1's address
        2   Person_D    A   Person D & E        family 2's address
        2   Person_E    A   Person D & E        family 2's address
        3   Person_F    B   Person F, G, & H    family 3's address
        3   Person_G    B   Person F, G, & H    family 3's address
        3   Person_H    B   Person F, G, & H    family 3's address
        4   Person_I    C   Person I & J        family 4's address
        4   Person_J    C   Person I & J        family 4's address

但我想得到的只是将“列表”添加到“地址”中,如下所示:

  Family.ID Family              Address             List
        1   Person A, B, & C    family 1's address  A
        2   Person D & E        family 2's address  A
        3   Person F, G, & H    family 3's address  B
        4   Person I & J        family 4's address  C

在合并之前我需要做一些事情来重塑数据框吗?

【问题讨论】:

  • 试试unique 即。 unique(both[-2])
  • 或者只是merge(unique(guests[-2]), addresses, by='Family.ID') -2 是删除第二列Names,它没有显示在预期的输出中
  • 谢谢!那行得通。

标签: r merge


【解决方案1】:

您可以在删除Names 列(guests[-2])后将merge 与unique 行的“guests”数据行(guests[-2])

merge(unique(guests[-2]), addresses, by='Family.ID')
#   Family.ID list           Family            Address
#1         1    A Person A, B, & C family 1's address
#2         2    A     Person D & E family 2's address
#3         3    B Person F, G, & H family 3's address
#4         4    C     Person I & J family 4's address

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2021-03-11
    • 1970-01-01
    • 2015-07-25
    相关资源
    最近更新 更多