It?s sometimes faster to ask from someone who has already learnt the syntax. In this case one has to do e.g. names(data$somecol) To get the collection and then iteration through it is almost like in Python: for(i in names(data$somecol)) { # do something }> Bert Gunter <bgunter.4567 at gmail.com> kirjoitti 6.11.2017 kello 19.55: > > Time to go through a tutorial or two! -- This forum cannot replace such self study. > > Your query evidences some basic confusion, but ?tapply or the equivalent lapply(split(...)) construct are most likely relevant. > > 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, Nov 6, 2017 at 9:40 AM, mviljamaa <mviljamaa at kapsi.fi <mailto:mviljamaa at kapsi.fi>> wrote: > How can I do a for loop that does to a data.frame column what: > > for x in xs: > > does in Python? > > Obviously the data.frame column in question holds "levels". What if the data.frame is in matrix form? > > BR, Matti > > ______________________________________________ > R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
Except that syntax is wrong:> d <- data.frame (a = 1:3, b = letters[1:3]) > names(d$a)NULL -- 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, Nov 6, 2017 at 11:26 AM, Matti Viljamaa <mviljamaa at kapsi.fi> wrote:> It?s sometimes faster to ask from someone who has already learnt the > syntax. > In this case one has to do e.g. > > names(data$somecol) > > To get the collection and then iteration through it is almost like in > Python: > > for(i in names(data$somecol)) { > # do something > } > > Bert Gunter <bgunter.4567 at gmail.com> kirjoitti 6.11.2017 kello 19.55: > > Time to go through a tutorial or two! -- This forum cannot replace such > self study. > > Your query evidences some basic confusion, but ?tapply or the equivalent > lapply(split(...)) construct are most likely relevant. > > 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, Nov 6, 2017 at 9:40 AM, mviljamaa <mviljamaa at kapsi.fi> wrote: > >> How can I do a for loop that does to a data.frame column what: >> >> for x in xs: >> >> does in Python? >> >> Obviously the data.frame column in question holds "levels". What if the >> data.frame is in matrix form? >> >> BR, Matti >> >> ______________________________________________ >> 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/posti >> ng-guide.html <http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > >[[alternative HTML version deleted]]
Maybe you are thinking of the levels function rather than the names function? Which still presumes the column is a factor column, when it might actually be a character column (in which case you might use the unique function). Again, a reproducible example would stop the guessing. -- Sent from my phone. Please excuse my brevity. On November 6, 2017 11:26:24 AM PST, Matti Viljamaa <mviljamaa at kapsi.fi> wrote:>It?s sometimes faster to ask from someone who has already learnt the >syntax. >In this case one has to do e.g. > >names(data$somecol) > >To get the collection and then iteration through it is almost like in >Python: > >for(i in names(data$somecol)) { > # do something >} > >> Bert Gunter <bgunter.4567 at gmail.com> kirjoitti 6.11.2017 kello 19.55: >> >> Time to go through a tutorial or two! -- This forum cannot replace >such self study. >> >> Your query evidences some basic confusion, but ?tapply or the >equivalent lapply(split(...)) construct are most likely relevant. >> >> 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, Nov 6, 2017 at 9:40 AM, mviljamaa <mviljamaa at kapsi.fi ><mailto:mviljamaa at kapsi.fi>> wrote: >> How can I do a for loop that does to a data.frame column what: >> >> for x in xs: >> >> does in Python? >> >> Obviously the data.frame column in question holds "levels". What if >the data.frame is in matrix form? >> >> BR, Matti >> >> ______________________________________________ >> R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To >UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help ><https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide >http://www.R-project.org/posting-guide.html ><http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > > [[alternative HTML version deleted]] > >______________________________________________ >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.
Hello, If you want to loop through the columns of a data.frame you can do for(i in names(df)){ [code] } Another way would be lapply(names(df), function(somecol) class(df[[somecol]])) where class(df[[somecol]]) is just an example, you would use whatever fits your needs. When you say that the column in question holds "levels" do you mean it's a factor? (factors are R's categorical variables.) Hope this helps, Rui Barradas Em 06-11-2017 19:26, Matti Viljamaa escreveu:> It?s sometimes faster to ask from someone who has already learnt the syntax. > In this case one has to do e.g. > > names(data$somecol) > > To get the collection and then iteration through it is almost like in Python: > > for(i in names(data$somecol)) { > # do something > } > >> Bert Gunter <bgunter.4567 at gmail.com> kirjoitti 6.11.2017 kello 19.55: >> >> Time to go through a tutorial or two! -- This forum cannot replace such self study. >> >> Your query evidences some basic confusion, but ?tapply or the equivalent lapply(split(...)) construct are most likely relevant. >> >> 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, Nov 6, 2017 at 9:40 AM, mviljamaa <mviljamaa at kapsi.fi <mailto:mviljamaa at kapsi.fi>> wrote: >> How can I do a for loop that does to a data.frame column what: >> >> for x in xs: >> >> does in Python? >> >> Obviously the data.frame column in question holds "levels". What if the data.frame is in matrix form? >> >> BR, Matti >> >> ______________________________________________ >> R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. >
Matti - Since you are asking about looping through a column, not looping across columns, it is simply the following: # Note: data.frame() turns strings into factors by default. myDF <- data.frame(type = c("a", "j", "a", "a", "j"), weight = c(12.3, 6.8, 10.5, NA, "5.5")) myDF$type # ... is a vector of factors for(type in myDF$type) { print(type) } # or (less explicit in the code and will break if the order of columns # ever changes): for(type in myDF[ , 1]) { print(type) } # In a matrix, all elemnts have to be of the same type. Let's make a # matrix of characters: myMat <- matrix(cbind(as.character(myDF$type), c("red", "green", "red", "red", "green")), ncol = 2) for(type in myMat[ , 1]) { print(type) } As others have remarked, for added efficiency with large datasets we often use functions from the apply() family, rather than for-loops. I hope this helps, Boris PS: don't call your data frames "df" since df() is a function and this may make your code hard to read.> On Nov 6, 2017, at 2:49 PM, Rui Barradas <ruipbarradas at sapo.pt> wrote: > > Hello, > > If you want to loop through the columns of a data.frame you can do > > for(i in names(df)){ > [code] > } > > Another way would be > > lapply(names(df), function(somecol) class(df[[somecol]])) > > where class(df[[somecol]]) is just an example, you would use whatever fits your needs. > > When you say that the column in question holds "levels" do you mean it's a factor? (factors are R's categorical variables.) > > Hope this helps, > > Rui Barradas > > > Em 06-11-2017 19:26, Matti Viljamaa escreveu: >> It?s sometimes faster to ask from someone who has already learnt the syntax. >> In this case one has to do e.g. >> >> names(data$somecol) >> >> To get the collection and then iteration through it is almost like in Python: >> >> for(i in names(data$somecol)) { >> # do something >> } >> >>> Bert Gunter <bgunter.4567 at gmail.com> kirjoitti 6.11.2017 kello 19.55: >>> >>> Time to go through a tutorial or two! -- This forum cannot replace such self study. >>> >>> Your query evidences some basic confusion, but ?tapply or the equivalent lapply(split(...)) construct are most likely relevant. >>> >>> 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, Nov 6, 2017 at 9:40 AM, mviljamaa <mviljamaa at kapsi.fi <mailto:mviljamaa at kapsi.fi>> wrote: >>> How can I do a for loop that does to a data.frame column what: >>> >>> for x in xs: >>> >>> does in Python? >>> >>> Obviously the data.frame column in question holds "levels". What if the data.frame is in matrix form? >>> >>> BR, Matti >>> >>> ______________________________________________ >>> R-help at r-project.org <mailto:R-help at r-project.org> mailing list -- To UNSUBSCRIBE and more, see >>> https://stat.ethz.ch/mailman/listinfo/r-help <https://stat.ethz.ch/mailman/listinfo/r-help> >>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html <http://www.r-project.org/posting-guide.html> >>> and provide commented, minimal, self-contained, reproducible code. >>> >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> 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. >> > > ______________________________________________ > 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.