【问题标题】:Finding a value in a dataframe according to two columns from another data frame with R使用 R 根据另一个数据帧的两列在数据帧中查找一个值
【发布时间】:2021-01-08 11:53:39
【问题描述】:

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

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

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

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

【问题讨论】:

  • help("merge")
  • 但是,merge 仍然为每个国家/地区提供了一个新列。我只想有一个新列,按国家和重量列出成本
  • 我认为你的数据结构对我来说不是很清楚。如果您期望有用的答案,您应该提供一个最小的可重现示例。可能需要重塑您的 data.frames 之一。
  • 请在问题中添加此类信息(在其下方有一个编辑链接),其中可以进行正确的格式化。
  • df1 +--------+---------+--------+--+ |客户 |国家 |重量 | | +--------+---------+--------+--+ |一个 |是 | 3 | | |乙 |法语 | 4 | | | c |通用电气 | 4 | | +--------+---------+--------+--+ df2: +--------+-----+ -----+-----+ |重量 |是 |法语 |通用电气 | +--------+-----+-----+-----+ | 3 | 1.1 | 0.8 | 1.3 | | 4 | 1.3 | 1.7 | 2.3 | | 5 | 2.2 | 2.6 | 3.5 | +--------+-----+-----+-----+

标签: r dataframe combinations multiple-columns calculated-columns


【解决方案1】:

您的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 2021-01-26
    • 2022-01-08
    • 1970-01-01
    • 2021-08-18
    • 2023-03-19
    相关资源
    最近更新 更多