如何基于产品名称将某DataFrame的列复制到另一不同大小的DataFrame?
问题解决方法
你的for循环存在几个明显问题,没法实现需求:
- 语法完全错误:循环变量的定义方式
for(vdixg$vendido(these column doesn't exist) in vdixg)不符合R的语法规则 - 赋值用错运算符:
vdixg$vendido == dff$vendido是比较操作,不是赋值,赋值应该用<- - 向量匹配逻辑错误:两个DataFrame行数不同,直接用
vdixg$producto == dff$producto会触发循环补齐,得到的结果完全不是你想要的按产品名称匹配的效果
用dplyr可以很简洁地实现需求,不需要写循环,具体代码如下:
library(dplyr) # 假设vdixg是要新增列的2120行DataFrame,dff是含vendido列的1480行DataFrame vdixg <- vdixg %>% # 按producto匹配,只取dff里的producto和vendido列 left_join(dff %>% select(producto, vendido), by = "producto") %>% # 把匹配不到的NA替换为0 mutate(vendido = ifelse(is.na(vendido), 0, vendido))
补充说明
如果dff里存在同一个producto对应多条记录的情况,建议先对dff去重,确保每个产品只对应一个vendido值,避免合并后出现重复行:
vdixg <- vdixg %>% left_join( dff %>% distinct(producto, .keep_all = TRUE) %>% select(producto, vendido), by = "producto" ) %>% mutate(vendido = ifelse(is.na(vendido), 0, vendido))
内容的提问来源于stack exchange,提问作者KingP
相关产品推荐
相关产品推荐

