[R] How To Extract Row from A Data Frame

David Winsemius dwinsemius at comcast.net
Mon Oct 4 04:48:28 CEST 2010


On Oct 3, 2010, at 10:22 PM, Gundala Viswanath wrote:

> I have a data frame that looks like this:
>
>
>> print(df)
>  V2     V3     V4     V5     V6     V7     V8     V9    V10     
> V11    V12
> 1 FN  8.637 28.890 31.430 31.052 29.878 33.215 32.728 32.187 29.305  
> 31.462
> 2 FP 19.936 30.284 33.001 35.100 30.238 34.452 35.849 34.185 31.242  
> 35.635
> 3 TN  0.000 17.190 16.460 21.100 17.960 15.120 17.200 17.190 15.270  
> 15.310
> 4 TP 22.831 31.246 33.600 35.439 32.073 33.947 35.050 34.472 31.228  
> 33.701
>
>
> How can I extract rows as specified, e.g.
> I tried this to extract the first line ("FN") starting from V3 to V12:
>
>> fn <- df[1,df$V3:df$V12]
>
> But it gives columns starting not from V3.

The ":" operator only works for numeric values in [,] or []. And even  
then you would have been passing a very strange arguemtn to ":", since  
df$V3 is a vector rather than a scalar. But these would also fail:
df[1, V3:V12]
df[1, "V3":"V12"]


These all work:

df[which(df$V2=="FN"), grep("^V3$", names(df)):grep("^V12$",  
names(df)) ]

df[1, 2:11]

df[1, -1]


# the subset function may have tricked you into believing that my  
statement about the ":" operator was false, but that function first  
parses the select= (and subset=) expressions against column names and  
returns column numbers before passing to ":"

subset(df, V2=="FN", select=-V2)

subset(df, V2=="FN", select=V3:V12)

>
> What's the right way to do it?
>
> - G.V.
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list