Я хотел бы создать вектор, который идентифицирует строки с совпадающим идентификатором.Например, hldid
- это идентификатор домашнего хозяйства, persid
- персональный идентификатор, а partner id
- соответствующий идентификатор.
Я хотел бы создать вектор couple
, когда persid
имеет partner
.
hldid persid partner_id age sex child
1 243312 2 91 20 2 0
2 243312 91 2 29 1 0
3 103340 0 0 6 1 2
4 103340 2 91 39 2 2
5 103340 4 0 14 2 2
6 103340 91 2 42 1 2
7 1105347 2 0 25 2 2
8 1105347 3 3 50 2 2
9 1105347 91 0 25 1 2
10 110322323 3 0 15 2 1
11 110322323 10 0 15 2 1
Это даст
hldid persid partner_id age sex child couple
1 243312 2 91 20 2 0 1
2 243312 91 2 29 1 0 1
3 103340 0 0 6 1 2 0
4 103340 2 91 39 2 2 1
5 103340 4 0 14 2 2 0
6 103340 91 2 42 1 2 1
7 1105347 2 0 25 2 2 0
8 1105347 3 3 50 2 2 0
9 1105347 91 0 25 1 2 0
10 110322323 3 0 15 2 1 0
11 110322323 10 0 15 2 1 0
Я создал loop
, такой как
df$couple = 0
for(i in 1:nrow(df)){
if(
df$hldid[i] == df$hldid[i+1] &
(df$persid[i] == df$partner_id[i+1])
)
{
df$couple[i] = 1
df$couple[i+1] = 1
}
}
}
Однако, он не работает должным образом, когда идентификаторы не следующиедруг другу.
df = structure(list(hldid = c(243312L, 243312L, 103340L, 103340L,
103340L, 103340L, 1105347L, 1105347L, 1105347L, 110322323L, 110322323L
), persid = c(2L, 91L, 0L, 2L, 4L, 91L, 2L, 3L, 91L, 3L, 10L),
partner_id = c(91, 2, 0, 91, 0, 2, 0, 3, 0, 0, 0), age = c(20L,
29L, 6L, 39L, 14L, 42L, 25L, 50L, 25L, 15L, 15L), sex = c(2L,
1L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L), child = c(0, 0,
2, 2, 2, 2, 2, 2, 2, 1, 1)), class = "data.frame", row.names = c(NA,
-11L), .internal.selfref = <pointer: 0x10280b2e0>)