根据具有R的另一个数据帧中的两列在数据帧中查找值

问题描述

我有一个数据框,其中每个订单都有两个特定的列(重量和国家/地区)。我还有另一个数据框,提供了重量和国家/地区及其成本的所有可能组合。

我想在第一个数据帧处创建一个新列,以给出每种情况的费用。

这是我尝试过的方法,但我根据体重在每个国家/地区给了我一列。

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

解决方法

您的df2格式较宽,并且weight变量的大小写不同,因此您需要先解决这些问题,然后合并才能起作用,请尝试...

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,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