基于个人排名的组 ID
Group ID based on individual rank
我有以下个人数据,我想制作一个唯一的家庭标识符。每个人在家庭中都有自己的等级,所以等级 1 基本上标志着新家庭的开始。
例如
rank name
1 John
2 Lisa
3 Stu
1 Phil
1 Mike
1 Florence
2 George
3 David
4 Diana
1 Eleanor
我要找的结果是这样的:
rank name id
1 John 1
2 Lisa 1
3 Stu 1
1 Phil 2
1 Mike 3
1 Florence 4
2 George 4
3 David 4
4 Diana 4
1 Eleanor 5
大约有 320 000 个人,因此组 ID 应该从 1 到 sum(df$rank[rank = 1]) 或类似的值。任何其他类型的唯一 ID 也可以,它不一定是 seq(1,n,1).
df$id <- cumsum(df$rank == 1)
# rank name id
# 1 1 John 1
# 2 2 Lisa 1
# 3 3 Stu 1
# 4 1 Phil 2
# 5 1 Mike 3
# 6 1 Florence 4
# 7 2 George 4
# 8 3 David 4
# 9 4 Diana 4
# 10 1 Eleanor 5
正如@Andre Elrico 指出的那样,如果任何行的 rank
是 NA
,则上面的方法将在所有后续行中为 id
提供 NA
,所以如果您知道 rank
可能是 NA
(但不是当它应该是 1),您可以使用下面的选项。
df$id <- cumsum(df$rank %in% 1)
使用的数据:
df <- read.table(text = '
rank name
1 John
2 Lisa
3 Stu
1 Phil
1 Mike
1 Florence
2 George
3 David
4 Diana
1 Eleanor
', header = T)
我有以下个人数据,我想制作一个唯一的家庭标识符。每个人在家庭中都有自己的等级,所以等级 1 基本上标志着新家庭的开始。 例如
rank name
1 John
2 Lisa
3 Stu
1 Phil
1 Mike
1 Florence
2 George
3 David
4 Diana
1 Eleanor
我要找的结果是这样的:
rank name id
1 John 1
2 Lisa 1
3 Stu 1
1 Phil 2
1 Mike 3
1 Florence 4
2 George 4
3 David 4
4 Diana 4
1 Eleanor 5
大约有 320 000 个人,因此组 ID 应该从 1 到 sum(df$rank[rank = 1]) 或类似的值。任何其他类型的唯一 ID 也可以,它不一定是 seq(1,n,1).
df$id <- cumsum(df$rank == 1)
# rank name id
# 1 1 John 1
# 2 2 Lisa 1
# 3 3 Stu 1
# 4 1 Phil 2
# 5 1 Mike 3
# 6 1 Florence 4
# 7 2 George 4
# 8 3 David 4
# 9 4 Diana 4
# 10 1 Eleanor 5
正如@Andre Elrico 指出的那样,如果任何行的 rank
是 NA
,则上面的方法将在所有后续行中为 id
提供 NA
,所以如果您知道 rank
可能是 NA
(但不是当它应该是 1),您可以使用下面的选项。
df$id <- cumsum(df$rank %in% 1)
使用的数据:
df <- read.table(text = '
rank name
1 John
2 Lisa
3 Stu
1 Phil
1 Mike
1 Florence
2 George
3 David
4 Diana
1 Eleanor
', header = T)