>我正在尝试:
- 计算警察单位之间的通话时长差异 响应同一呼叫
- 确定具有相同呼叫 ID 的一组呼叫中的最长持续时间
- 按持续时间降序排列
我执行此操作的步骤可在下面的代码片段中找到。
首先,我按 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, : 在"duration_seq"列中提供了 2 个要分配给大小为 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")]
这就是你要做的吗?