首页 > 解决方案 > 具有函数“seq”的 data.table 中的错误是什么意思——“RHS 长度必须为 1 或与 LHS 长度完全匹配”?

问题描述

我正在尝试:

  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, ) 中的错误:提供 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”以供以后在代码中使用。

标签: rdata.tablesequenceseq

解决方案


我认为您要查找的内容可以使用data.table. with.N非常有用,因为它只计算 中的行数,data.table如果您指定一个组,它将计算该组中的行数。所以代码看起来像这样:

call_duration_diff_by_unit[, duration_seq := 1:.N, by = c("ID")]

这是你的目的吗?


推荐阅读