Skip to content

extracting rows of a dataframe

4 messages · robin hankin, Berwin A Turlach, PIKAL Petr +1 more

#
Hi

look at the following session, in which I have a dataframe,
and I want to extract the second row, without the first column.

Everything works as expected until the last line, where I set
the names of x to NULL, and get a non-desired object (I
want c(4,3).).


Three questions:

(1)  why is as.vector(a[2,-1]) not a vector?

(2) How come setting names to NULL gives me bad weirdness?

(3) Can I structure my dataframe in a better way, so that
this problem does not occur?




 > a <- data.frame(male=c(T,T,F),mass=c(1,4,3),height=c(4,3,2))
 > a
    male mass height
1  TRUE    1      4
2  TRUE    4      3
3 FALSE    3      2
 > x <- as.vector(a[2,-1])
 > x
   mass height
2    4      3
 > names(x) <- NULL
 > x
   structure("4", class = "AsIs") structure("3", class = "AsIs")
2                              4                              3
 >

--
Robin Hankin
Uncertainty Analyst
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743
#
RH> Three questions:

    RH> (1)  why is as.vector(a[2,-1]) not a vector?
Did you read the help file of as.vector() ?
male mass height
1  TRUE    1      4
2  TRUE    4      3
3 FALSE    3      2
[1] "list"
`data.frame':	1 obs. of  2 variables:
 $ mass  : num 4
 $ height: num 3

Clearly you want:
num [1:2] 4 3
[1] 4 3


    RH> (2) How come setting names to NULL gives me bad weirdness?
`data.frame':	1 obs. of  2 variables:
 $ : num 4
 $ : num 3
structure("4", class = "AsIs") structure("3", class = "AsIs")
2                              4                              3

With your "names(x)<-NULL" command you are wiping out the names of the
variables in your data frame.  Looking at print.data.frame(), the
answer to the so-called weirdness can presumably be found in
format.data.frame(). 

    RH> (3) Can I structure my dataframe in a better way, so that
    RH> this problem does not occur?
Not really, it's more a question of the appropriate use of
as.vector(). :-))

Cheers,

        Berwin

========================== Full address ============================
Berwin A Turlach                      Tel.: +61 (8) 6488 3338 (secr)   
School of Mathematics and Statistics        +61 (8) 6488 3383 (self)      
The University of Western Australia   FAX : +61 (8) 6488 1028
35 Stirling Highway                   
Crawley WA 6009                e-mail: berwin at maths.uwa.edu.au
Australia                        http://www.maths.uwa.edu.au/~berwin
#
Hi

or maybe 

 x <- as.numeric(a[2,-1])

can suit to your needs.

Petr
On 2 Dec 2005 at 17:14, Berwin A Turlach wrote:
From:           	Berwin A Turlach <berwin at maths.uwa.edu.au>
Date sent:      	Fri, 2 Dec 2005 17:14:42 +0800
To:             	Robin Hankin <r.hankin at noc.soton.ac.uk>
Copies to:      	RHelp <r-help at stat.math.ethz.ch>
Subject:        	Re: [R] extracting rows of a dataframe
Send reply to:  	berwin at maths.uwa.edu.au
	<mailto:r-help-request at stat.math.ethz.ch?subject=unsubscribe>
	<mailto:r-help-request at stat.math.ethz.ch?subject=subscribe>
Petr Pikal
petr.pikal at precheza.cz
#
The key things here are:

1) a data frame is a list with some attributes (unlike a
matrix which is (generally) an atomic vector with attributes).

2) 'as.vector' removes attributes.

Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")
Robin Hankin wrote: