匹配 "uniqid" 与相应的性别和年龄。

Matching "uniqid" with corresponding sex and age.

我有一个数据框 imcds 来自一项调查,该调查向住户询问了家庭中每个人的性别和年龄信息。所以户主就是第 1 个人,其他人就是第 2、3、4 个人……等等……因此:

uniqid  Age1  Age2  Age3  Sex1  Sex2  Sex3

1012501  9     7      5     1    2      1
1012502  9     7      5     1    2      1
1012503  9     7      5     1    2      1
1012601  8     5      NA    2    1      NA
1012602  8     5      NA    2    1      NA

uniqid的前五位数字为户号,后两位为个人标识。因此,Person 1012503 的 Age 值为 Age3 (5),Sex 为 Sex3 (1)。我想要做的是将数据框 imcds 重塑成这样的东西:

uniqid  Age  Sex  

1012501  9     1      
1012502  7     2      
1012503  5     1      
1012601  8     2      
1012602  5     1   

每个uniqid及其对应的SexAgevalues.The数据框有583个变量的2095个obs。我需要一个循环吗?我能做什么?

我们从'uniqid'列中提取6到7个字符的子串,用它来创建row/column索引('ind'),从[=16=中提取相应的元素] 列和 'Sex' 列,以及 cbind 与数据集的第一列。

ind <- cbind(1:nrow(df1), as.numeric(substr(df1$uniqid, 6,7)))
Age <- df1[grep("Age", names(df1))][ind]
Sex <- df1[grep("Sex", names(df1))][ind]
df2 <- cbind(df1[1], Age, Sex)
df2
#   uniqid Age Sex
#1 1012501   9   1
#2 1012502   7   2
#3 1012503   5   1
#4 1012601   8   2
#5 1012602   5   1