首页 > 解决方案 > 使用 R 根据来自另一个数据帧的两列在数据帧中查找一个值

问题描述

我有一个数据框,每个订单都有两个特定的列(重量和国家)。我有另一个数据框,给出了重量和国家的所有可能组合,以及它们的成本。

我想在第一个数据框中创建一个新列,给出每种情况的成本。

这是我尝试过的,但是我根据权重为每个国家/地区提供了一个列。

df1$cost <- df2[df1$weight,df1$country]

标签: rdataframecombinationsmultiple-columnscalculated-columns

解决方案


您的 df2 是宽格式,并且权重变量具有不同的大小写,因此您需要在合并之前解决这些问题,试试这个...

library(tidyr)
df2 <- 
   tidyr::pivot_longer(df2, -Weight, names_to = "country", values_to = "cost")

names(df2)[names(df2) == "Weight"] <- "weight"

df2
#> # A tibble: 9 x 3
#>   weight country  cost
#>    <dbl> <chr>   <dbl>
#> 1      3 BE        1.1
#> 2      3 FR        0.8
#> 3      3 GE        1.3
#> 4      4 BE        1.3
#> 5      4 FR        1.7
#> 6      4 GE        2.3
#> 7      5 BE        2.2
#> 8      5 FR        2.6
#> 9      5 GE        3.5

merge(df1, df2)
#>   country weight client cost
#> 1      BE      3      a  1.1
#> 2      FR      4      b  1.7
#> 3      GE      4      c  2.3

您的数据

df1 <- data.frame( client = c("a","b","c"),
                   country = c("BE", "FR", "GE"),
                   weight = c(3, 4,4)
)
df1
#>   client country weight
#> 1      a      BE      3
#> 2      b      FR      4
#> 3      c      GE      4
df2 <- data.frame(
   Weight = c(3, 4, 5),
   BE = c(1.1, 1.3, 2.2),
   FR = c(0.8, 1.7, 2.6),
   GE = c(1.3, 2.3, 3.5)
)
df2
#>   Weight  BE  FR  GE
#> 1      3 1.1 0.8 1.3
#> 2      4 1.3 1.7 2.3
#> 3      5 2.2 2.6 3.5


推荐阅读