[R] Replace NAs in split lists

Ek Esawi esawiek at gmail.com
Mon Jan 8 20:09:43 CET 2018


Thank you all. Now everything works. Happy 2018 and beyond
EK

On Sun, Jan 7, 2018 at 10:13 PM, Ek Esawi <esawiek at gmail.com> wrote:
> Hi all--
>
> I stumbled on this problem online. I did not like the solution given
> there which was a long UDF. I thought why cannot split and l/s apply
> work here. My aim is to split the data frame, use l/sapply, make
> changes on the split lists and combine the split lists to new data
> frame with the desired changes/output.
>
> The data frame shown below has a column named ID which has 2 variables
> a and b; i want to replace the NAs on the Value column by 2, which is
> the only numeric entry, for ID=a and by 5 for ID=b.
>
> I worked out the solution but could not replace the results in the split lists.
>
> Original dataframe , df1
>   ID ID_2 Firist Value
> 1  a   aa   TRUE     2
> 2  a   ab  FALSE    NA
> 3  a   ac  FALSE    NA
> 4  b   aa   TRUE     5
> 5  b   ab  FALSE    NA
> Sdf1
> $a
> ID ID_2 Firist Value
> 1  a   aa   TRUE     2
> 2  a   ab  FALSE    NA
> 3  a   ac  FALSE    NA
> $b
>   ID ID_2 Firist Value
> 4  b   aa   TRUE     5
> 5  b   ab  FALSE    NA
> Desired results
> ID ID_2 Firist Value
> 1  a   aa   TRUE    2
> 2  a   ab  FALSE    2
> 3  a   ac  FALSE    2
>
> $b
>   ID ID_2 Firist Value
> 4  b   aa   TRUE     5
> 5  b   ab  FALSE     5
>
> My code
>
> sdf <- split(df1,df$ID)
> lapply(sdf, function(z) ifelse(is.na(z$Value),z$Value[!is.na(z$Value)],z$Value))
> result:
> $ a: num [1:3] 2 2 2
> $ b: num [1:2] 5 5
>
> How could I put these two lists back in the split data frame, sdf1?
> Then I could use do.call to reassemble a data frame from the split
> lists,
>
> Thanks,
> EK



More information about the R-help mailing list