Alfonso Vergara - 1 year ago 111
R Question

# How to find the highest value of a column in a data frame in R?

I have the following data frame which I called ozone:

``````   Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9
``````

I would like to extract the highest value from
`ozone`
,
`Solar.R`
,
`Wind`
...

Also, if possible how would I sort
`Solar.R`
or any column of this data frame in descending order

I tried

``````max(ozone, na.rm=T)
``````

which gives me the highest value in the dataset.

I have also tried

``````max(subset(ozone,Ozone))
``````

but got
`"subset" must be logical."`

I can set an object to hold the subset of each column, by the following commands

``````ozone <- subset(ozone, Ozone >0)
max(ozone,na.rm=T)
``````

but it gives the same value of 334, which is the max value of the data frame, not the column.

Any help would be great, thanks.

Similar to `colMeans`, `colSums`, etc, you could write a column maximum function, `colMax`, and a column sort function, `colSort`.

``````colMax <- function(data) sapply(data, max, na.rm = TRUE)
colSort <- function(data, ...) sapply(data, sort, ...)
``````

I use `...` in the second function in hopes of sparking your intrigue.

``````dat <- read.table(h=T, text = "Ozone Solar.R Wind Temp Month Day
1     41     190  7.4   67     5   1
2     36     118  8.0   72     5   2
3     12     149 12.6   74     5   3
4     18     313 11.5   62     5   4
5     NA      NA 14.3   56     5   5
6     28      NA 14.9   66     5   6
7     23     299  8.6   65     5   7
8     19      99 13.8   59     5   8
9      8      19 20.1   61     5   9")
``````

Use `colMax` function on sample data:

``````colMax(dat)
#  Ozone Solar.R    Wind    Temp   Month     Day
#   41.0   313.0    20.1    74.0     5.0     9.0
``````

To do the sorting on a single column,

``````sort(dat\$Solar.R, decreasing = TRUE)
# [1] 313 299 190 149 118  99  19
``````

and over all columns use our `colSort` function,

``````colSort(dat, decreasing = TRUE) ## compare with '...' above
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download