I just came up with a solution right after i posted the question, but i figured there must be a better and shorter one.than my solution sdf1[[1]][1,4]<-lapplyresults[[1]] sdf1[[2]][1,4]<-lapplyresults[[2]]
EK On Sun, Jan 7, 2018 at 10:13 PM, Ek Esawi <esaw...@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 ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.