samedi 1 avril 2017

How to create a new variable after comparing values from multiple columns in R?

I have this data frame, q17, below. My goal is replacing "contacts" following these rules:

if any values in q17a, q17d, q17f, q17g <5 then contacts is 1

if any values in q17a, q17d, q17f, q17g ==5 then contacts is 0

if any values in q17a, q17d, q17f, q17g ==8 or 9 then contacts is 99

if any values in q17a, q17d, q17f, q17g ==NA then contacts is 99

q17[1:50,]

   q17a q17d q17f q17g contacts
1     2    5    2   NA       NA
2     5    5    5   NA       NA
3     1    5    5   NA       NA
4     4   NA    5   NA       NA
5     1    5    5    5       NA
6     3    5   NA   NA       NA
7     4    5    5   NA       NA
8     5    5    1   NA       NA
9     4    5   NA   NA       NA
10    4    5    4   NA       NA
11    1    5    5    5       NA
12    3    5    5   NA       NA
13    4    4    3    4       NA
14    5   NA    5   NA       NA
15    5    5    5    5       NA
16    5   NA    4   NA       NA
17    1    5   NA   NA       NA
18    4    5    3   NA       NA
19    4    5    4   NA       NA
20    3    5    5   NA       NA
21    5    5    4   NA       NA
22    4    5    2   NA       NA
23    4   NA    3   NA       NA
24    5   NA   NA   NA       NA
25    2    5    5   NA       NA
26    2    5    4    5       NA
27    3   NA    3   NA       NA
28    1   NA    1   NA       NA
29    5    5    5   NA       NA
30    2    5    5   NA       NA
31    5    5   NA   NA       NA
32    2    5    4   NA       NA
33    4    4    3    3       NA
34    5   NA    5   NA       NA
35    5    5    5    4       NA
36    5    5    4    4       NA
37    2    5    5    5       NA
38    4    5   NA   NA       NA
39    1    5    1   NA       NA
40    4    5    5    5       NA
41    3    5   NA   NA       NA
42    4    5    4   NA       NA
43    5   NA   NA   NA       NA
44    5    5   NA   NA       NA
45    2    5    3    3       NA
46    5    5    5   NA       NA
47    2    5    3    5       NA
48    3    5    5   NA       NA
49    5    5    5    5       NA
50    5    5   NA   NA       NA

I tried follwing for example, which is not efficient at all. Can somebody suggest a better way doing this?

d1$q17d <- ifelse(d1$q17d==1|d$q17d==2|d$q17d==3|d$q17d==4,1,d1$q17d)
d1$q17d <- ifelse(d1$q17d==5,0,d1$q17d)
d1$q17d <- ifelse(d1$q17d==8, d1$q17d)
d1$q17d <- ifelse(is.na(d1$q17d),99, d1$q17d)

d1$contacts <- ifelse(d1$q17d==1,1,d1$contacts)
d1$contacts

Aucun commentaire:

Enregistrer un commentaire