将“uniqid”与相应的性别和年龄相匹配。

时间:2016-09-20 10:48:59

标签: r reshape

我从一项调查中得到了一个数据框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的前五个数字是家庭ID,后两个是人员标识符。因此,人1012503的年龄值为Age3(5),性别为Sex3(1)。我想要做的是将数据框imcds重塑为以下内容:

uniqid  Age  Sex  

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

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

1 个答案:

答案 0 :(得分:0)

我们在' uniqid'中提取6到7个字符的子字符串。列,用于创建行/列索引(' ind'),从'年龄'中提取相应的元素。专栏和'性'列,以及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