[R] Sorting a Data Frame
Sarah Goslee
sarah.goslee at gmail.com
Tue Jan 26 22:35:56 CET 2016
On Tue, Jan 26, 2016 at 4:24 PM, Robert Sherry <rsherry8 at comcast.net> wrote:
>
> Thank you for the response. As expected, the following expression worked:
> df[order(df$x),]
This says to sort the rows, and leave the columns alone.
Subsetting a 2-dimensional object is via
[rows, columns]
> I would expect the following expression to work also:
> df[order(df$x)]
This does something a bit unexpected, and what it does depends on
whether you have a data frame or matrix.
> mydf <- data.frame(A=1:3, B=4:6)
> mydf[2, ] # row 2
A B
2 2 5
> mydf[, 2] # col 2
[1] 4 5 6
> mydf[2] # ???
B
1 4
2 5
3 6
A data frame is "really" a list of columns, so giving a single value
returns that column.
> mymat <- as.matrix(mydf)
> mymat[2, ] # row 2
A B
2 5
> mymat[, 2] # col 2
[1] 4 5 6
> mymat[2] # ???
[1] 2
But for a matrix, it returns that element, starting at the top left
and working down rows first.
So it's a really good idea to not subset your rectangular objects that
way, as it may eventually bite you.
> However it does not. That is, the comma is needed. Please tell me why the
> comma is there.
>
> Thanks
> Bob
> On 1/26/2016 8:19 AM, S Ellison wrote:
>>>
>>> On 23.01.2016 01:21, Robert Sherry wrote:
>>>>
>>>> In R, I run the following commands:
>>>> df = data.frame( x=runif(10), y=runif(10) )
>>>> df2 = df[order(x),]
>>>
>>> You use another x from your workspace, you actually want to
>>>
>>>
>>> df2 = df[order(df[,"x"]),]
>>
>> or
>> df[order(df$x),]
>>
>> And just to prevent yet more confusion, you might also want to avoid 'df'
>> as a name. 'df' is the function that returns the density of the F
>> distribution ...
>>
>> S Ellison
>>
>>
More information about the R-help
mailing list