[R] Replace NAs in split lists

Ek Esawi esawiek at gmail.com
Mon Jan 8 04:13:09 CET 2018


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