r语言 - 在函数为 "seq" -- "The RHS length must either be 1 or match the LHS length exactly" 的 data.table



>我正在尝试:

  1. 计算警察单位之间的通话时长差异 响应同一呼叫
  2. 确定具有相同呼叫 ID 的一组呼叫中的最长持续时间
  3. 按持续时间降序排列

我执行此操作的步骤可在下面的代码片段中找到。

首先,我按 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")]

这就是你要做的吗?

相关内容

最新更新