具有“seq”函数的data.table中的错误含义是什么 - “RHS长度必须为1或者与LHS长度完全匹配”?

问题描述 投票:0回答:1

我试图:

  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”以供稍后在代码中使用。

r data.table sequence seq
1个回答
0
投票

我认为你所寻找的东西可以通过data.table中的特殊符号更容易地完成。使用.N的那个非常有用,因为它只计算data.table中的行数,如果指定一个组,它将计算该组中的行数。所以代码看起来像这样:

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

这是你想要的吗?

© www.soinside.com 2019 - 2024. All rights reserved.