[R] Replace missing value within group with non-missing value

Leask, Graham g.leask at aston.ac.uk
Sat Apr 6 16:34:13 CEST 2013


Hi Rui,

Thank you for your suggestion which is very much appreciated. Unfortunately running this code produces the following error.

error in '$<-.data.frame' ('*tmp*', "mth", value = NA_real_) :
    replacement has 1 rows, data has 0

I'm sure there must be an elegant solution to this problem?

Best wishes



Graham

On 6 Apr 2013, at 12:15, "Rui Barradas" <ruipbarradas at sapo.pt> wrote:

> Hello,
> 
> That's not a very good way of posting your data, preferably paste the output of ?dput in a post.
> Some thing along the lines of the following might do what you want. It seems that the groups are established by 'dn' and 'obs' numbers. If so, try
> 
> 
> # Make up some data
> dat <- data.frame(dn = 4, obs = rep(1:5, each = 6), mth = NA)
> dat$mth[6] <- 487
> dat$mth[9] <- 488
> dat$mth[18] <- 488
> dat$mth[21] <- 489
> dat$mth[30] <- 489
> 
> 
> sp <- split(dat, list(dat$dn, dat$obs))
> names(sp) <- NULL
> tmp <- lapply(sp, function(x){
>        idx <- which(!is.na(x$mth))[1]
>        x$mth <- x$mth[idx]
>        x
>    })
> do.call(rbind, tmp)
> 
> 
> Hope this helps,
> 
> Rui Barradas
> 
> 
> Em 06-04-2013 11:33, Leask, Graham escreveu:
>> Dear List members
>> 
>> I have a large dataset organised in choice groups see sample below
>> 
>>      +-------------------------------------------------------------------------------------------------+
>>      | dn   obs   choice      acid   br                 date       cdate   situat~n   mth   year   set |
>>      |-------------------------------------------------------------------------------------------------|
>>   1. |  4     1        0     LOSEC    1                    .           .                .      .     1 |
>>   2. |  4     1        0    NEXIUM    2                    .           .                .      .     1 |
>>   3. |  4     1        0    PARIET    3                    .           .                .      .     1 |
>>   4. |  4     1        0   PROTIUM    4                    .           .                .      .     1 |
>>   5. |  4     1        0    ZANTAC    5                    .           .                .      .     1 |
>>      |-------------------------------------------------------------------------------------------------|
>>   6. |  4     1        1     ZOTON    6   23aug2000 01:00:00   23aug2000         NS   487   2000     1 |
>>   7. |  4     2        0     LOSEC    1                    .           .                .      .     2 |
>>   8. |  4     2        0    NEXIUM    2                    .           .                .      .     2 |
>>   9. |  4     2        1    PARIET    3   25sep2000 01:00:00   25sep2000          L   488   2000     2 |
>> 10. |  4     2        0   PROTIUM    4                    .           .                .      .     2 |
>>      |-------------------------------------------------------------------------------------------------|
>> 11. |  4     2        0    ZANTAC    5                    .           .                .      .     2 |
>> 12. |  4     2        0     ZOTON    6                    .           .                .      .     2 |
>> 13. |  4     3        0     LOSEC    1                    .           .                .      .     3 |
>> 14. |  4     3        0    NEXIUM    2                    .           .                .      .     3 |
>> 15. |  4     3        0    PARIET    3                    .           .                .      .     3 |
>>      |-------------------------------------------------------------------------------------------------|
>> 16. |  4     3        0   PROTIUM    4                    .           .                .      .     3 |
>> 17. |  4     3        0    ZANTAC    5                    .           .                .      .     3 |
>> 18. |  4     3        1     ZOTON    6   20sep2000 00:00:00   20sep2000          R   488   2000     3 |
>> 19. |  4     4        0     LOSEC    1                    .           .                .      .     4 |
>> 20. |  4     4        0    NEXIUM    2                    .           .                .      .     4 |
>>      |-------------------------------------------------------------------------------------------------|
>> 21. |  4     4        1    PARIET    3   27oct2000 00:00:00   27oct2000         NL   489   2000     4 |
>> 22. |  4     4        0   PROTIUM    4                    .           .                .      .     4 |
>> 23. |  4     4        0    ZANTAC    5                    .           .                .      .     4 |
>> 24. |  4     4        0     ZOTON    6                    .           .                .      .     4 |
>> 25. |  4     5        0     LOSEC    1                    .           .                .      .     5 |
>>      |-------------------------------------------------------------------------------------------------|
>> 26. |  4     5        0    NEXIUM    2                    .           .                .      .     5 |
>> 27. |  4     5        0    PARIET    3                    .           .                .      .     5 |
>> 28. |  4     5        0   PROTIUM    4                    .           .                .      .     5 |
>> 29. |  4     5        0    ZANTAC    5                    .           .                .      .     5 |
>> 30. |  4     5        1     ZOTON    6   23oct2000 03:00:00   23oct2000         NS   489   2000     5 |
>> 
>> I wish to fill in the missing values in each choice set - delineated by dn (Doctor) obs (Observation number) and choices (1 to 6).
>> For each choice set one choice is chosen which contains full time information for that choice set ie in set 1 choice 6 was chosen and
>> shows the month 487. The other 5 choices show mth as missing. I want to fill these with the correct mth.
>> 
>> I am sure there must be an elegant way to do this in R?
>> 
>> 
>> Best wishes
>> 
>> 
>> 
>> Graham
>> 
>> 
>>    [[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
> 



More information about the R-help mailing list