Dear R community, I have a question seems very simple but have trouble to do it. I have a list which stores many data frames. Now, I want to perform log10 on one column in each data frame in the list and save the value as a new column back to the original data frame in the list. How do I quickly do that with lapply function ? Many thanks.
Do you want it to run quickly or be quick to write? Why have you specified that you want a solution that uses lapply? (Such constraints often arise in the context of homework, whereas someone interested in getting the job done does not usually care about which function is used.) On June 18, 2018 1:46:57 PM PDT, Honkit Wong <stephen66 at gmail.com> wrote:>Dear R community, >I have a question seems very simple but have trouble to do it. >I have a list which stores many data frames. Now, I want to perform >log10 on one column in each data frame in the list and save the value >as a new column back to the original data frame in the list. How do I >quickly do that with lapply function ? > >Many thanks. >______________________________________________ >R-help at 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.-- Sent from my phone. Please excuse my brevity.
It depends on whether you wish to refer to the column to be logged by name or index. Reprex: set.seed(1234) dat <- lapply(1:3, function(i)data.frame(a = runif(5), b sample(letters,5))) ## by numerical index of column d <- lapply(dat,function(x){x[,"logged"]<- log10(x[,1]); x}) ## by name of column dd <- lapply(dat,function(x){x[,"logged"]<- log10(x[,"a"]); x}) There are also slight variations on how you can do the "[" indexing that others may post. Note that you have to return the modified data frame in the function. Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Jun 18, 2018 at 1:46 PM, Honkit Wong <stephen66 at gmail.com> wrote:> Dear R community, > I have a question seems very simple but have trouble to do it. > I have a list which stores many data frames. Now, I want to perform log10 > on one column in each data frame in the list and save the value as a new > column back to the original data frame in the list. How do I quickly do > that with lapply function ? > > Many thanks. > ______________________________________________ > R-help at 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. >[[alternative HTML version deleted]]
Thanks! Why have to add ?x? at the end of function, which was what I missed.> On Jun 18, 2018, at 2:53 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote: > > It depends on whether you wish to refer to the column to be logged by name or index. > > Reprex: > > set.seed(1234) > dat <- lapply(1:3, function(i)data.frame(a = runif(5), b = sample(letters,5))) > > ## by numerical index of column > d <- lapply(dat,function(x){x[,"logged"]<- log10(x[,1]); x}) > > ## by name of column > dd <- lapply(dat,function(x){x[,"logged"]<- log10(x[,"a"]); x}) > > There are also slight variations on how you can do the "[" indexing that others may post. > Note that you have to return the modified data frame in the function. > > Cheers, > Bert > > > > > > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > >> On Mon, Jun 18, 2018 at 1:46 PM, Honkit Wong <stephen66 at gmail.com> wrote: >> Dear R community, >> I have a question seems very simple but have trouble to do it. >> I have a list which stores many data frames. Now, I want to perform log10 on one column in each data frame in the list and save the value as a new column back to the original data frame in the list. How do I quickly do that with lapply function ? >> >> Many thanks. >> ______________________________________________ >> R-help at 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. >[[alternative HTML version deleted]]