问题描述
我有一个数据框,其中每个订单都有两个特定的列(重量和国家/地区)。我还有另一个数据框,提供了重量和国家/地区及其成本的所有可能组合。
这是我尝试过的方法,但我根据体重在每个国家/地区给了我一列。
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