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.
Boris: "As others have remarked, for added efficiency with large datasets we often use functions from the apply() family, rather than for-loops." That is generally false, though it is a common misconception. Apply-type functions are used to maintain fidelity -- and for some, clarity -- to a functional programming paradigm. 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 3:28 PM, Boris Steipe <boris.steipe at utoronto.ca> wrote:> 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. > > ______________________________________________ > 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]]
You are right.> On Nov 6, 2017, at 6:47 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote: > > Boris: > > "As others have remarked, for added efficiency with large datasets we often use functions from the apply() family, rather than for-loops." > > That is generally false, though it is a common misconception. Apply-type functions are used to maintain fidelity -- and for some, clarity -- to a functional programming paradigm. > > 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 3:28 PM, Boris Steipe <boris.steipe at utoronto.ca> wrote: > 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. > > ______________________________________________ > 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. >