R 创建序列指示器
我有一个R数据帧df,如下所示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和
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