R 如何在data.table中包含条件:=引用或set()

R 如何在data.table中包含条件:=引用或set(),r,set,data.table,conditional,R,Set,Data.table,Conditional,对于R来说是新手,我通过DataCamp来更好地理解数据表。正在尝试应用:=并将大型数据集设置为聚合。 想知道是否有人能给我一个指针,指示将条件包含到数据表的:=或set()中。我有一个大的1000万行20+列数据表,我试图按ID和周期(使用setkey)对其进行分组,针对列名“period”测试行I-1,以在“flag”列中提供分类输出0或1 我试过: for(i in 1:200) set(DT, i, .(period[i]-period[i-1]<=1, period[i]-

对于R来说是新手,我通过DataCamp来更好地理解数据表。正在尝试应用:=并将大型数据集设置为聚合。 想知道是否有人能给我一个指针,指示将条件包含到数据表的:=或set()中。我有一个大的1000万行20+列数据表,我试图按ID和周期(使用setkey)对其进行分组,针对列名“period”测试行I-1,以在“flag”列中提供分类输出0或1

我试过:

for(i in 1:200) 
  set(DT, i, .(period[i]-period[i-1]<=1, period[i]-period[i-1]>1), flag = .(0,1))
# error is unused argument flag=.(0,1)
for(1:200中的i)
设置(DT,i,(周期[i]-周期[i-1]1),标志=(0,1))
#错误为未使用的参数标志=(0,1)
我可能混淆了:=和set以及base R。我没有看到示例将一行与另一行进行比较,并在调用中包含索引以提供两种不同的输出


上一次我选中了
符号在
DT[…]
之外不起作用,因此在
集合(…)
内也不起作用。无论如何,如果它只是“如果它改变了一个以上,那么它就是标志”,那么
DT[,标志:=period-shift(period,fill=period[1L])>=1L,by=ID]
您可以将其包装为您想要的1/0而不是true/false的.integer。顺便说一下,下次请提供一个可复制的例子。谢谢你,弗兰克。当我尝试你的代码时,我不确定我是否理解这种转变。是否使用shift填充向前递增一行。我还没有得到我想要的答案,但可能很难解释。我需要假设当按ID分组时,第一个标志是0,然后测试下一行(每组),看看它是否超过1的差值。如果是,则标志应为1,否则为0。整数换行问题。这是在呼叫中仅包装在flag或j上的吗?谢谢,阿加尼建议你试着阅读
?shift
,并仔细阅读其中的示例,看看它是否适合你。明白了,弗兰克。谢谢你在这方面的领导。轮班让我参加了比赛。挑战在于确保列类型在开始时明显是强制的。再次感谢。下次我会用更清晰的代码可用性来调整我的请求。