私はhousehold grid
として知られている調査で一般的に見られるものを扱っています。 household grid
は、世帯のメンバー間の関係を示します。私はここで1r - 世帯のグリッドでカップルIDを取得
houseID id sex age relto1 relto2 relto3 relto4
1 1 1 male 45 0 spouse not applicable not applicable
2 1 2 female 38 spouse 0 not applicable not applicable
3 2 1 female 18 0 daughter daughter not applicable
4 2 2 male 50 parent 0 spouse not applicable
5 2 3 female 45 parent spouse 0 not applicable
6 3 1 female 45 0 parent parent spouse
7 3 2 male 17 son 0 brother son
8 3 3 male 19 son brother 0 son
9 3 4 male 50 spouse parent parent 0
houseID
を再現しようとした
が一意家庭識別子、家庭のmembresのid
固有のIDであり、relto_
は、各家庭用id
の関係を示します。
id == 1
最初家庭用
id == 2
の
spouse
であることを意味 例えば
、行1、relto2 == spouse
。
私は配偶者の識別子を取得することに興味があります。 トリックは、spouse id
が常に同じ位置にあるわけではないということです。世帯数4で
、配偶者は私がこの1
あるまで来ることができました。このhouseID id sex age spousenum
1 1 1 male 45 2
2 1 2 female 38 1
3 2 1 female 18 0
4 2 2 male 50 3
5 2 3 female 45 2
6 3 1 female 45 4
7 3 2 male 17 0
8 3 3 male 19 0
9 3 4 male 50 1
最高のコードを実行することですに興味を持って何id
1と4
であります
dtsp = df[, grepl('rel', colnames(df)) ]
# not too long, its fine #
for(i in 1:nrow(dtsp)){
for(j in 1:ncol(dtsp)){
if(dtsp[i, j] == 'spouse'){
df[i,'spousenum'] <- j
}
}
}
しかし、それは少しばかげて遅いようです。
もっと効率的なコードをお探しですか?
データ
df = rbind(c('1', '1', 'male', '45', '0', 'spouse', 'not applicable', 'not applicable'),
c('1', '2', 'female', '38', 'spouse', '0', 'not applicable', 'not applicable'),
c('2', '1', 'female', '18', '0', 'daughter', 'daughter', 'not applicable'),
c('2', '2', 'male', '50', 'parent', '0', 'spouse', 'not applicable'),
c('2', '3', 'female', '45', 'parent', 'spouse', '0', 'not applicable'),
c('3', '1', 'female', '45', '0', 'parent', 'parent', 'spouse'),
c('3', '2', 'male', '17', 'son', '0', 'brother', 'son'),
c('3', '3', 'male', '19', 'son', 'brother', '0', 'son'),
c('3', '4', 'male', '50', 'spouse', 'parent', 'parent', '0'))
df = as.data.frame(df)
colnames(df) = c('houseID', 'id', 'sex', 'age', 'relto1', 'relto2', 'relto3', 'relto4')
は精巧な答えてくれてありがとう – giacomo