【问题标题】:Add information from a data frame from another data frame从另一个数据框中添加来自数据框的信息
【发布时间】:2022-01-09 14:36:59
【问题描述】:

我有一个自行车服务的数据框(jan2020),其中起点站和终点站如下:

Origen_Id Destiny_Id #data frame A
        2         52
       93         10 

在另一个数据框 (stations) 中,我有电台的 ID、名称、经纬度等信息。

id Nombre  Latitude   Longitude
 2  Name1 20.666378  -103.34882
 3  Name2 20.667228    -103.366
 4  Name3  20.66769 -103.368252

我想创建一个这样的数据框,

Origen_Id Destiny_Id   Lat_Orig    Lon_Orig     Lat_Des    Long_Des 
        2         52  20.666378  -103.34882 some number some number

我尝试用for-loop 来做,但效率不高,另一个想法是

jan2020$Index_Id <- match(jan2020$Origen_Id, stations$id)

但是,这仅告诉我数据框stations 中的电台索引,我不确定如何使用我需要的信息创建一个新列。

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    设两个数据为df1df2

    df1 <- read.table(text = "Origen_Id Destiny_Id 
     2             4
     3            2 ", header = T)
      Origen_Id Destiny_Id
    1         2          4
    2         3          2
    
    df2 <- read.table(text = "id Nombre Latitude Longitude
    2  Name1 20.666378 -103.34882
    3  Name2 20.667228 -103.366
    4  Name3 20.66769  -103.368252", header = T)
      id Nombre Latitude Longitude
    1  2  Name1 20.66638 -103.3488
    2  3  Name2 20.66723 -103.3660
    3  4  Name3 20.66769 -103.3683
    

    那么,想要的结果df3可以通过

    df3 <- cbind(df1, df2[match(df1$Origen_Id, df2$id),3:4], df2[match(df1$Destiny_Id, df2$id),3:4])
    names(df3) <- c("Origen_Id", "Destiny_Id", "Lat_Orig", "Lon_Orig", "Lat_Des", "Long_Des")
    df3
      Origen_Id Destiny_Id Lat_Orig  Lon_Orig  Lat_Des  Long_Des
    1         2          4 20.66638 -103.3488 20.66769 -103.3683
    2         3          2 20.66723 -103.3660 20.66638 -103.3488
    

    【讨论】:

    • 这对我帮助很大!谢谢
    【解决方案2】:

    将其合并两次,一次在 Origen_Id 上,然后在 Destiny_Id 上,后缀为:

    merge(merge(df1, df2, by.x = "Origen_Id", by.y = "id"),
          df2, by.x = "Destiny_Id", by.y = "id", suffixes = c("Ori", "Des"))
    
    #   Destiny_Id Origen_Id NombreOri LatitudeOri LongitudeOri NombreDes LatitudeDes LongitudeDes
    # 1          2         3     Name2    20.66723    -103.3660     Name1    20.66638    -103.3488
    # 2          4         2     Name1    20.66638    -103.3488     Name3    20.66769    -103.368
    

    (使用Park's data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      相关资源
      最近更新 更多