[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