我试图:
我这样做的步骤可以在下面的代码片段中找到。
首先,我按ID降序排列(具有相同ID的多个呼叫),然后通过呼叫持续时间以小时(降序)排列。
然后,我将data.frame变为data.table。
然后,按持续时间应用序列(降序)。
call_duration_diff_by_unit[, duration_seq := seq(CALL_DURATION_HOURS), by = c("ID")]
这就是出现问题的地方:我收到错误消息
“
[.data.table
中的错误(call_duration_diff_by_unit ,,:=
(duration_seq,:提供2个项目,分配给'duration_seq'列中大小为1的组1 .RHS长度必须为1(单个值可以)或者完全匹配LHS长度如果你想“回收”RHS,请明确使用rep()让你的代码读者明白这个意图。“
我发现的这个错误的唯一解释是特定于我没有使用的独特包。我现在理解“回收”的概念,但不确定它如何适用于这种情况......没有两个不同长度的向量。
R可能会错误地读取by = c("ID")
部分作为第二个输入吗?
call_duration_diff_by_unit <- cad_cfs_data %>%
arrange(desc(ID), desc(CALL_DURATION_HOURS))
call_duration_diff_by_unit <-
data.table(call_duration_diff_by_unit)
call_duration_diff_by_unit[, duration_seq := seq(CALL_DURATION_HOURS), by = c("ID")]
我希望它为每组唯一的呼叫ID创建一个唯一的数字ID(为最长的持续时间分配1)。相反,我得到错误并且它不保存变量“duration_seq”以供稍后在代码中使用。
我认为你所寻找的东西可以通过data.table
中的特殊符号更容易地完成。使用.N
的那个非常有用,因为它只计算data.table
中的行数,如果指定一个组,它将计算该组中的行数。所以代码看起来像这样:
call_duration_diff_by_unit[, duration_seq := 1:.N, by = c("ID")]
这是你想要的吗?