2016-09-20 4 views
0

У меня есть dataframe imcds из опроса, в котором спрашивали информацию о сексе и возрасте каждого домохозяйства домохозяйства. Таким образом, хозяин дома будет Person 1 и остальной народ будет человек 2, 3, 4 .. и т.д ... Таким образом:Соответствие «uniqid» с соответствующим полом и возрастом.

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 со своим корреспондентом Sex и Age кадра данных values.The имеет 2095 набл 583 переменных. Нужен ли мне цикл? Что я могу сделать?

ответ

0

Мы извлекаем подстроку из 6-7 символов в столбце «uniqid», используем ее для создания индекса строки/столбца («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 
+0

Спасибо! Это отлично поработало. Но как мне изменить сам df? добавить 'Age' и' Sex' в качестве новых столбцов исходного 'imcds' data.frame ?? Чтобы просто отбросить «Age1», «Age2», ... «Age7» и оставить один уникальный столбец с возрастом и полом каждого 'uniqid'. –

+0

@GracielaCarrillo Вы можете создать новый объект с помощью 'df2 <- cbind (df1 [1], ...' (обновлено сообщение – akrun

+0

@GracielaCarrillo. Если нам нужно создать новые столбцы в исходном наборе данных, просто сделайте 'df1 [c («Возраст», «Секс»)] <- список (возраст, пол) ' – akrun