data.table报错:数据未存入初始数据表,:=赋值无效求解决
解决data.table报错:data is not stored to the initial data table
问题原因
- 原代码在分组内部用
<-修改的是局部变量,不会同步更新到原data.table,因此触发"数据未存回初始表"的报错。 - 尝试用
:=但无效,是因为赋值的向量长度和分组内总行数不匹配——你只修改了valid_rows对应的部分行,而data.table要求分组内的:=赋值必须是长度1或与组内行数完全一致的向量。
修正后的代码
Transactions_DT[, Transaction_Date := { # 标记Unique_ID非空且非NA的行(用逻辑向量更适配data.table索引) valid_rows <- Unique_ID != "" & !is.na(Unique_ID) if (any(valid_rows)) { # 取第一个有效行的日期作为起始点 start_date <- first(Transaction_Date[valid_rows]) # 计算有效行的累计天数偏移量,减去第一个周期长度确保第一个有效行日期不变 cum_days <- cumsum(Period_Length[valid_rows]) cum_days <- cum_days - cum_days[1] # 构造完整的日期向量:有效行替换为计算后的值,其余保留原日期 new_dates <- Transaction_Date new_dates[valid_rows] <- start_date + days(cum_days) new_dates } else { # 无有效行时直接返回原日期 Transaction_Date } }, by = Con_ID]
代码说明
- 用
:=直接原地更新原表的Transaction_Date列,符合data.table的操作规范。 - 构造与分组内行数一致的
new_dates向量,避免长度不匹配问题。 - 逻辑向量
valid_rows替代which,更高效且符合data.table的索引习惯。
内容的提问来源于stack exchange,提问作者user25003765
相关产品推荐
相关产品推荐

