根据另一参考表在数据框中的一列中插入值
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.当边缘情况