根据另一参考表在数据框中的一列中插入值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据另一参考表在数据框中的一列中插入值相关的知识,希望对你有一定的参考价值。

我目前有一个产品表和一个成分表,如下:

产品(实际:13列,为便于说明,将其截断):

Product_code  Product_name  Ingredient  Brand_name
A123          Product1      NA          BrandA
B123          Product2      NA          BrandB
C123          Product3      NA          BrandC

成分(实际有2列,如图所示:]:

Product_code  Ingredient
A123          Ing1
A123          Ing2
B123          IngA
B123          IngB
B123          IngC

目标是在“产品”表中“填写”每种产品的成分详细信息,使其看起来像这样:

组合表:

Product_code  Product_name  Ingredient  Brand_name
A123          Product1      Ing1        BrandA
A123          Product1      Ing2        BrandA
B123          Product2      IngA        BrandB
B123          Product2      IngB        BrandB
B123          Product2      IngC        BrandB
C123          Product3      NA          BrandC

由于某些产品具有一种成分,而其他产品具有多种成分,我希望能够为具有多种成分的产品复制新行(除“成分”列外,所有其他列值都保持相同)。在“成分”表中没有数据的产品将保留为“ NA”。

我曾尝试使用dplyr::right_join,但除“ Product_code”和“ Ingredient”以外,其他所有列均给我留下了“ NA”值。希望获得有关如何进行此操作的建议。谢谢!

答案

如果您不想要NAs,请查看dplyr::inner_join。使用正确的联接,您要查询的行数与成分数据框一样多。左侧数据框中的不匹配关键字将具有NA

另一答案

我认为您正在寻找full_join。也可以删除Ingredient数据框中的Product列,因为它不提供成分信息。

library(dplyr)

combined <- Ingrident %>%
  full_join(Product %>% select(-Ingredient), by = c("Product_code"))
combined
#   Product_code Ingredient Product_name Brand_name
# 1         A123       Ing1     Product1     BrandA
# 2         A123       Ing2     Product1     BrandA
# 3         B123       IngA     Product2     BrandB
# 4         B123       IngB     Product2     BrandB
# 5         B123       IngC     Product2     BrandB
# 6         C123       <NA>     Product3     BrandC

DATA

Product <- read.table(text = "Product_code  Product_name  Ingredient  Brand_name
A123          Product1      NA          BrandA
B123          Product2      NA          BrandB
C123          Product3      NA          BrandC",
                  header = TRUE, stringsAsFactors = FALSE)

Ingredient <- read.table(text = "Product_code  Ingredient
A123          Ing1
A123          Ing2
B123          IngA
B123          IngB
B123          IngC",
                        header = TRUE, stringsAsFactors = FALSE)

以上是关于根据另一参考表在数据框中的一列中插入值的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Pyspark 中同一数据框中另一列的正则表达式值过滤数据框中的一列

如何根据 PySpark 数据框的另一列中的值修改列? F.当边缘情况

根据列中的状态更改创建触发器并在表的另一列中插入值

如何计算包含一组列中的值和 Pandas 数据框中另一列中的另一个值的行数?

基于另一列中的值的一列上的pyspark滞后函数

根据另一列中的值从一列中减去值(SQL)