For each entry type in column?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

For each entry type in column?

mavavilj
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

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Bert Gunter-2
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 <[hidden email]> 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
>
> ______________________________________________
> [hidden email] 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
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Bert Gunter-2
In reply to this post by mavavilj
Prrobably also worth mentioning for this sort of thing is the "tidyverse"
machinery, for which the RStudio site should probably be your first port of
call. This will however require learning alternative, and probably
additional, paradigms.

-- 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 <[hidden email]> 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
>
> ______________________________________________
> [hidden email] 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
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

mavavilj
In reply to this post by Bert Gunter-2
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 <[hidden email]> 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 <[hidden email] <mailto:[hidden email]>> 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
>
> ______________________________________________
> [hidden email] <mailto:[hidden email]> 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]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Bert Gunter-2
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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
>>
>> ______________________________________________
>> [hidden email] 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]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Jeff Newmiller
In reply to this post by mavavilj
All data frames "look like" matrices, but none of them "are" matrices. I think we need you to follow the Posting Guide and supply an R reproducible example that gives us a concrete idea what the data structure is that you are working with, and an example of what you expect to get out of the code you want us to show you.  The dput function can be a lifesaver in helping you provide R code that can reproduce in our R sessions the data you have in front of you. Read more in [1][2] and [3].

[1] http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example

[2] http://adv-r.had.co.nz/Reproducibility.html

[3] https://cran.r-project.org/web/packages/reprex/index.html (read the vignette)
--
Sent from my phone. Please excuse my brevity.

On November 6, 2017 9:40:23 AM PST, mviljamaa <[hidden email]> 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
>
>______________________________________________
>[hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Jeff Newmiller
In reply to this post by mavavilj
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email]
><mailto:[hidden email]>> 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
>>
>> ______________________________________________
>> [hidden email] <mailto:[hidden email]> 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]]
>
>______________________________________________
>[hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Rui Barradas
In reply to this post by mavavilj
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 <[hidden email]> 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 <[hidden email] <mailto:[hidden email]>> 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
>>
>> ______________________________________________
>> [hidden email] <mailto:[hidden email]> 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]]
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Boris Steipe
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email] <mailto:[hidden email]>> 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
>>>
>>> ______________________________________________
>>> [hidden email] <mailto:[hidden email]> 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]]
>>
>> ______________________________________________
>> [hidden email] 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.
>>
>
> ______________________________________________
> [hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Bert Gunter-2
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 <[hidden email]>
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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email] <mailto:
> [hidden email]>> 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
> >>>
> >>> ______________________________________________
> >>> [hidden email] <mailto:[hidden email]> 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]]
> >>
> >> ______________________________________________
> >> [hidden email] 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.
> >>
> >
> > ______________________________________________
> > [hidden email] 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.
>
> ______________________________________________
> [hidden email] 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]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: For each entry type in column?

Boris Steipe
You are right.





> On Nov 6, 2017, at 6:47 PM, Bert Gunter <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email]> 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 <[hidden email] <mailto:[hidden email]>> 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
> >>>
> >>> ______________________________________________
> >>> [hidden email] <mailto:[hidden email]> 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]]
> >>
> >> ______________________________________________
> >> [hidden email] 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.
> >>
> >
> > ______________________________________________
> > [hidden email] 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.
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.