函数为“的data.table中的错误意味着什么;以下简称&引用;RHS长度必须为1或与LHS长度完全匹配;?

函数为“的data.table中的错误意味着什么;以下简称&引用;RHS长度必须为1或与LHS长度完全匹配;?,r,data.table,sequence,seq,R,Data.table,Sequence,Seq,我正试图: 计算警察单位之间通话时间的差异 回应同一个电话 识别具有相同呼叫ID的一组呼叫中最长的持续时间 按持续时间降序排列 在下面的代码片段中可以找到我的步骤 首先,我按ID按降序排列(相同ID的多个呼叫),然后按呼叫持续时间按小时排列(降序) 然后,我将data.frame制作成data.table 然后,按持续时间应用序列(降序) call\u duration\u diff\u by\u unit[,duration\u seq:=seq(call\u duration\u HOURS

我正试图:

  • 计算警察单位之间通话时间的差异 回应同一个电话
  • 识别具有相同呼叫ID的一组呼叫中最长的持续时间
  • 按持续时间降序排列
  • 在下面的代码片段中可以找到我的步骤

    首先,我按ID按降序排列(相同ID的多个呼叫),然后按呼叫持续时间按小时排列(降序)

    然后,我将data.frame制作成data.table

    然后,按持续时间应用序列(降序)

    call\u duration\u diff\u by\u unit[,duration\u seq:=seq(call\u duration\u HOURS),by=c(“ID”)]

    这就是问题发生的地方:我得到一个错误

    [.data.table
    中出错(按单位调用持续时间差异,
    :=
    (持续时间顺序,: 在“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")]
    
    
    call\u duration\u diff\u by\u unit%
    安排(描述(ID),描述(通话时间)
    
    按单位调用\u duration\u diff\u我认为使用
    data.table
    中的特殊符号可以更轻松地完成您要查找的内容。带有
    .N
    的符号非常有用,因为它只计算
    data.table
    中的行数,如果您指定一个组,它将计算该组中的行数。因此de的外观如下所示:

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

    这就是你想要的吗?

    需要匹配的两个长度是给定
    ID
    组中向量(列)的长度(即
    ID
    等于给定值的行数),以及
    的RHS的输出:=
    。我想你实际上想要的是DT[,(duration_seq=seq(…),by=…]但从描述中我不确定。错误信息非常清楚:您在data.table中分配的向量与其行数不匹配。谢谢@IceCreamToucan和@Roland!我想我不明白如何为数据分配向量。与行数不匹配的表。我正在使用函数(seq)这将自动创建一个与行数完全匹配的数字序列(并在每次启动新ID时以1重新启动)你能解释一下代码中哪个向量不匹配吗?基于你刚才所说的,我认为你应该使用
    seq\u而不是
    seq
    谢谢!!它不能解释为什么我的旧代码停止工作了,但是你的代码工作得很好!这很有意义-我不知道那些特殊的符号。我会做一些修改正在阅读。太好了!很高兴它有帮助,是的,我不确定seq的问题,但当使用data.table时,符号非常有用和有效。data.table包中还有很多其他很酷的工具,值得花时间学习。祝你好运!至于为什么以前的代码可以工作,而现在不行,dat的1.12.2版a、 表更改了回收行为。请参阅“v1.12.2中的更改”下的第一项