R 创建序列指示器

R 创建序列指示器,r,R,我有一个R数据帧df,如下所示 ID <- c(1,2,1,3,3,3) Time <- c("7:30","10:30","11:00","4:00","8:00","8:00") sub_event <- c("TLIF","ALIF","ALIF","ALIF","TLIF","LAMI") df <- data.frame(ID,Time,sub_event) 使用新的rowid功能(1.9.8+): 一般来说,我建议不要用变量名重载base函数--seq和

我有一个R数据帧df,如下所示

ID   <- c(1,2,1,3,3,3)
Time <- c("7:30","10:30","11:00","4:00","8:00","8:00")
sub_event <- c("TLIF","ALIF","ALIF","ALIF","TLIF","LAMI")
df <- data.frame(ID,Time,sub_event)

使用新的
rowid
功能(1.9.8+):


一般来说,我建议不要用变量名重载
base
函数--
seq
df
都是函数。它最终会回来缠着你。

很确定你问的问题并不清楚。这个序列是如何定义的?@shayaa,MrFlick这不是我第一次假设的-中断后序列可以继续。注意,第一个ID 3是
seq
1的一部分,因为它是前3个。不要使用
cbind
生成数据帧;只需使用
data.frame
,即
data.frame(ID,Time)
(或在通话中定义
ID
Time
)。否则,所有数据都将被强制为相同的数据类型(
cbind
生成一个矩阵,该矩阵只能容纳一个),并且很可能会引入bug。在这里,
ID
最终将成为一个数字因子,这几乎肯定会让你以后感到困惑。@Gregor说,这肯定是一个数字因子duplicate@MichaelChirico你能给我指一下邮局吗。Flick先生的推荐信不是我要找的。谢谢!这很接近。我可以在“by”子句中使用两个以上的元素吗。我想使用df[,seq:=1.N,by=c(“ID”,“Time”)]。@user3897应该可以工作……实际上,它没有。是否有不同的语法来指定“by”子句的多个参数。@user3877您跳过了关键的
setDT(df)
步骤,该步骤将
df
data.frame
转换为
data.table
--how
[]
根据
df
data.frame
还是
data.table
而不同。我没有使用data.table。我通常坚持使用dplyr软件包进行大部分数据清理。你能帮我做一下记号或给我指一个参考资料吗?
  ID  Time seq
1  1  7:30   1
2  2 10:30   1
3  1 11:00   2
4  3  4:00   1
5  3  8:00   2
library(data.table)

setDT(df)

df[ , seq := rowid(ID)][]
#    ID  Time seq
# 1:  1  7:30   1
# 2:  2 10:30   1
# 3:  1 11:00   2
# 4:  3  4:00   1
# 5:  3  8:00   2