我有两个独立的数据集,我正在使用:
包含零售数据(POS)的主数据库有一个项目代码列,例如(12831903,E03JD920)。(我将此导入为DF,因为导入为tibble抛出解析错误)
二级数据库有项目代码和相应的项目描述。我把它放到R列表中:
itemlist <- setNames(as.list(itemcodes$l1desc),itemcodes$itemcode)
主数据集存储为main
。我试图编写一个函数/循环,检查主列itemcode
的每一行,看看itemlist
中是否有匹配。如果存在匹配,则函数/循环将匹配键中对应的值粘贴到新向量中。这个过程循环,直到每一行都找到一个匹配。
我怎么写这个循环?
下面的图片显示了列表的样子
第二张图片是主数据框架的一个片段
因此再次总结,我希望编写一个函数,通过列表解析以匹配主df中的项目代码值。我的最终目标是获取具有匹配项描述的新向量,然后再次将其与主数据框架合并。
for(i in 1:nrow(transactions)) {
if (transactions[i,4] == itemlist[i]) {
#if item code in pos log is equal to item code in list, paste corresponding
## value from key-value pair
mapped_items[i] <- paste0(names(itemlist))
}}
View(mapped_items)
这是我的伪代码看起来像,我试着运行这个的一些初始变体,但不断抛出一个错误,NAs正在被解析,但这可能是因为tibble。关于如何优雅地实现这个函数/循环,有什么想法吗?
如果有必要,我也会在python中尝试使用dict
def search(itemcode, code):
match "" " "
for i in itemcode:
if (code == i):
match = code
return match
def mapitems(transactions,itemcode):
mappedlist = {}
i = 0
for code in transactions:
mappedlist.append(search(itemcode,code))
return mappedlist
实际上,您既不应该使用R也不应该使用Python在实际的SQL数据库上执行非常基本的操作:
SELECT *
FROM item_codes ic
INNER JOIN retail_data rd
ON rd.item_code = ic.item_code
只需执行上面的查询,然后在R或Python脚本中以某种集合的形式访问结果集。