该错误在具有功能“ seq”的data.table中意味着什么-“ RHS长度必须为1或与LHS长度完全匹配”?

时间:2019-04-30 17:03:24

标签: r data.table sequence seq

我正在尝试:

  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”列中提供了将分配给大小为1的组1的2个项目。 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”供以后在代码中使用。

1 个答案:

答案 0 :(得分:0)

我认为使用data.table中的特殊符号可以更轻松地完成您要查找的内容。带有.N的行非常有用,因为它只计算data.table中的行数,如果您指定一个组,它将计算该组中的行数。因此代码如下所示:

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

这是你要去的吗?