合并transaction与customer数据集时出现data.table命名错误,求解决方案
合并data.table时列名分配错误的解决方法
我尝试用以下代码将交易数据集transactionData_3与客户数据集customerData做左连接:
data <- merge(transactionData_3, customerData, all.x = TRUE)
运行后报错:
Error in setnames(dt, c(by.x, start, end)) :
Can't assign 11 names to a 10 column data.table
两个数据集的结构信息如下:
transactionData_3结构
str(transactionData_3) Classes ‘data.table’ and 'data.frame': 246739 obs. of 8 variables: $ DATE : Date, format: "2018-10-17" "2019-05-14" "2019-05-20" "2018-08-17" ... $ STORE_NBR : int 1 1 1 2 2 4 4 5 7 7 ... $ LYLTY_CARD_NBR: int 1000 1307 1343 2373 2426 4149 4196 5026 7150 7215 ... $ TXN_ID : int 1 348 383 974 1038 3333 3539 4525 6900 7176 ... $ PROD_NBR : int 5 66 61 69 108 16 24 42 52 16 ... $ PROD_NAME : chr "Natural Chip Compny SeaSalt175g" "CCs Nacho Cheese 175g" "Smiths Crinkle Cut Chips Chicken 170g" "Smiths Chip Thinly S/Cream&Onion 175g" ... $ PROD_QTY : int 2 3 2 5 3 1 1 1 2 1 ... $ TOT_SALES : num 6 6.3 2.9 15 13.8 5.7 3.6 3.9 7.2 5.7 ...- attr(*, ".internal.selfref")=<externalptr>
customerData结构
str(customerData) Classes ‘data.table’ and 'data.frame': 72637 obs. of 3 variables: $ LYLTY_CARD_NBR : int 1000 1002 1003 1004 1005 1007 1009 1010 1011 1012 ... $ LIFESTAGE : chr "YOUNG SINGLES/COUPLES" "YOUNG SINGLES/COUPLES" "YOUNG FAMILIES" "OLDER SINGLES/COUPLES" ... $ PREMIUM_CUSTOMER: chr "Premium" "Mainstream" "Budget" "Mainstream" ...- attr(*, ".internal.selfref")=<externalptr>
错误原因
这个错误是data.table的merge函数处理列名时出现了逻辑偏差:
- 正常左连接后应该有10列(8+3-1,共享列
LYLTY_CARD_NBR合并后只保留一份),但函数试图给10列分配11个列名,说明合并时未正确识别共享列,大概率是连接键列名存在隐形差异(比如大小写、空格、不可见字符),导致函数误以为是两个不同列,进而计算错误。
修复步骤
显式指定连接键
手动指定by参数,避免自动识别列名时的错误:data <- merge(transactionData_3, customerData, by = "LYLTY_CARD_NBR", all.x = TRUE)检查并统一连接键列名
确认两个数据集的连接键列名完全一致:# 查看列名 colnames(transactionData_3) colnames(customerData) # 若有差异,统一列名(示例) setnames(customerData, old = "LYLTY_CARD_NBR", new = "LYLTY_CARD_NBR")更新data.table版本
该错误可能是旧版本data.table的bug,更新到最新版本即可解决:install.packages("data.table") library(data.table)
内容的提问来源于stack exchange,提问作者Anita Abbot
相关产品推荐
相关产品推荐

