r - 使用 R 根据来自另一个数据帧的两列在数据帧中查找一个值
问题描述
我有一个数据框,每个订单都有两个特定的列(重量和国家)。我有另一个数据框,给出了重量和国家的所有可能组合,以及它们的成本。
我想在第一个数据框中创建一个新列,给出每种情况的成本。
这是我尝试过的,但是我根据权重为每个国家/地区提供了一个列。
df1$cost <- df2[df1$weight,df1$country]
解决方案
您的 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
推荐阅读
- java - 将 LWJGL 与 Maven 一起使用时 OpenGL 的 SecurityException
- python - 如何确保只有 4 个函数实例正在运行(使用多处理)?
- angular - 自定义组件不是已知元素
- mongodb - 摩卡测试:为什么我作为用户得到空值?
- javascript - Angular:输出我的自定义指令事件的回调并在我的组件中订阅它
- python - Python - PermissionError:[WinError 5] 访问被拒绝:
- r - “递归索引在级别 4 失败”R 代码
- docker - Nginx反向代理不重定向?
- mysql - SQL查询生成排行榜并选择一个玩家信息
- loopback - 具有不同关系属性名称的环回中的多对多关系