我有一组观察性健康调查数据。我想修改源标识符,以便我仍然可以识别多个源,但为了保密,原始 ID 不是跟踪 ID。我很难弄清楚。
这是数据框的基本布局
ID
30
30
30
30
24
24
24
我想创建一个 newID 以便数据如下所示
NewID ID
1 30
1 30
1 30
1 30
2 24
2 24
2 24
我有一组观察性健康调查数据。我想修改源标识符,以便我仍然可以识别多个源,但为了保密,原始 ID 不是跟踪 ID。我很难弄清楚。
这是数据框的基本布局
ID
30
30
30
30
24
24
24
我想创建一个 newID 以便数据如下所示
NewID ID
1 30
1 30
1 30
1 30
2 24
2 24
2 24
if your data frame is df then this should do it.
df$NewID <- as.numeric(factor(df$ID))
rle
在这里很有用:
> ID <- rep(c(30,24), c(4,3)) # your data
> ind <- rle(ID)$lengths
> data.frame(ID, newID=rep(c(1,length(ind)), ind ))
ID newID
1 30 1
2 30 1
3 30 1
4 30 1
5 24 2
6 24 2
7 24 2
transform
也是另一种选择
> transform(ID, newID=rep(c(1,2), rle(ID)$lengths))
cbind(match(ID,unique(ID)),ID)