r - 具有函数“seq”的 data.table 中的错误是什么意思——“RHS 长度必须为 1 或与 LHS 长度完全匹配”?
问题描述
我正在尝试:
- 计算响应同一呼叫的警察单位之间的呼叫持续时间差异
- 识别具有相同呼叫 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, ) 中的错误:提供 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”以供以后在代码中使用。
解决方案
我认为您要查找的内容可以使用data.table
. with.N
非常有用,因为它只计算 中的行数,data.table
如果您指定一个组,它将计算该组中的行数。所以代码看起来像这样:
call_duration_diff_by_unit[, duration_seq := 1:.N, by = c("ID")]
这是你的目的吗?
推荐阅读
- python - Seaborn 未安装在 jupyter 笔记本中
- iis - IIS 在 localhost 上不起作用,如何解决?
- javascript - Lightning Tree Grid (LWC) - 为按钮类型列调用 onclick 方法
- kotlin - 函数实现 - Kotlin
- npm - 如何使用 Auth Token 将作用域 npm 包发布到私有 Bytesafe npm 注册表
- r - 试图为 Covid 时期创建一个假人
- javascript - 使用 React Hooks 添加到收藏夹并从收藏夹中查看?
- android - 使用范围存储保存二进制文件
- c# - Asp.Net Core MVC - 返回编辑后的模型不会更改使用 SelectTagHelper 创建的选择
- ios - React Native(0.63)警报在IOS中自动消失