Issue
我有一个用整数编码的家族关系数据框架,其中R01
是person N
到person 1
之间的关系,R02
是person N
到person 2
之间的关系,等等.
然而,每个家族矩阵中只有lower.tri
个是编码的,所以我试图编写一个函数,以match
表示upper.tri
中的正确关系.
Relationships
这些关系用整数编码如下:
1
=配偶,2
=同居伴侣,3
=儿子/女儿,4
=继儿子/女儿,5
=养子女,6
=女婿/儿媳,7
=父母/监护人,8
=继父母,9
=养父母,10
=公婆,11
=sibling /姐妹,12
=继sibling /姐妹,13
=养sibling /姐妹,14
=sibling /嫂子,15
=孙子女,16
=外祖父母,17
=其他亲属,18
=其他非亲属.
因此,这些关系是:
rel = c("1" = 1, "2" = 2, "3" = 7, "4" = 8, "5" = 9, "6" = 10, "7" = 3, "8" = 4, "9" = 5, "10" = 6, "11" = 11, "12" = 12, "13" = 13, "14" = 14, "15" = 16, "16" = 15, "17" = 17, "18" = 18)
Example Data
household person R01 R02 R03 R04 R05 R06
1 1 1 NA NA NA NA NA NA
2 1 2 1 NA NA NA NA NA
3 1 3 3 3 NA NA NA NA
4 1 4 3 3 11 NA NA NA
5 2 1 NA NA NA NA NA NA
6 2 2 3 NA NA NA NA NA
7 2 3 15 3 NA NA NA NA
8 3 1 NA NA NA NA NA NA
9 3 2 18 NA NA NA NA NA
10 4 1 NA NA NA NA NA NA
11 5 1 NA NA NA NA NA NA
12 5 2 5 NA NA NA NA NA
Required Output
household person R01 R02 R03 R04 R05 R06
1 1 1 NA 1 7 7 NA NA
2 1 2 1 NA 7 7 NA NA
3 1 3 3 3 NA 11 NA NA
4 1 4 3 3 11 NA NA NA
5 2 1 NA 1 16 NA NA NA
6 2 2 3 NA 1 NA NA NA
7 2 3 15 3 NA NA NA NA
8 3 1 NA 18 NA NA NA NA
9 3 2 18 NA NA NA NA NA
10 4 1 NA NA NA NA NA NA
11 5 1 NA 9 NA NA NA NA
12 5 2 5 NA NA NA NA NA
Example Code
df <- data.frame(household = c(1,1,1,1,2,2,2,3,3,4,5,5),
person = c(1,2,3,4,1,2,3,1,2,1,1,2),
R01 = c(NA, 1, 3, 3, NA, 3, 15, NA, 18, NA, NA, 5),
R02 = c(NA, NA, 3, 3, NA, NA, 3, rep(NA, 5)),
R03 = c(rep(NA,3), 11, rep(NA, 8)),
R04 = rep(NA, 12),
R05 = rep(NA, 12),
R06 = rep(NA, 12))
我知道有可能编写一个函数来进行矩阵匹配,然后将其应用到每个有dplyr
个的家庭,但是我还不擅长函数,所以我在一些领域遇到了问题.