• R语言
  • R中不使用循环增加分组序号

我有一个df(包含但不限于L和S列), 希望增加一列sequence值,最后形成这样的结果:
L S seq
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
aaaa bbbbb 1
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2
cccc ddddd 2

我使用下述循环达到了上述效果, 但是数据量大的情况下,无法跑出,请教有没有更效率的实现方式。谢谢!
j = 1
for (i in 1:dim(df)[1]) {
if (i==1) {
df$rank <- 1
}
else {
if (df[i-1, "L"]==df[i, "L"] && df[i-1, "S"]==df[i, "S"]) {
df$rank <- j
}
else {
df$rank <- j +1
j = j +1
}
}
}
输入data_1,输出data_3

data_2<-unique(data_1[,c("L","S")])
data_2$seq<-1:2  #2可改任意数字
data_3<-merge(data_1,data_2,by.x=c("L","S"),by.y=c("L","S"),all.x=TRUE,all.y=FALSE)
[未知用户]

seq这列并非只有两类, 你这种写法是死的。但依然感谢你的回复。
[未知用户]
:plain: ,不是可以改吗?都备注了,汗死...
如下:

data_2$seq<-1:nrow(data_2) 
这样就是与unique(data_1[,c("L","S")])行数相同的类数




[未知用户]

啊!我之前理解错了你的意思。非常感谢!好机智的做法!谢谢!