Подтвердить что ты не робот

Как найти максимальное значение столбца в кадре данных в R?

У меня есть следующий фрейм данных, который я назвал озоном:

   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

Я хотел бы извлечь максимальное значение из ozone, Solar.R, Wind...

Также, если возможно, как бы я сортировал Solar.R или любой столбец этого фрейма данных в порядке убывания

Я пробовал

max(ozone, na.rm=T)

который дает мне самое высокое значение в наборе данных.

Я также пробовал

max(subset(ozone,Ozone))

но получил "subset" must be logical."

Я могу установить объект для хранения подмножества каждого столбца с помощью следующих команд

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

но он дает то же значение 334, которое является максимальным значением кадра данных, а не столбцом.

Любая помощь будет отличной, спасибо.

4b9b3361

Ответ 1

Аналогично colMeans, colSums и т.д. вы можете написать максимальную функцию столбца, colMax и функцию сортировки столбцов, colSort.

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

Я использую ... во второй функции в надежде искры вашей интриги.

Получить данные:

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")

Используйте функцию colMax для данных образца:

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

Чтобы выполнить сортировку по одному столбцу,

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

и во всех столбцах используйте нашу функцию colSort,

colSort(dat, decreasing = TRUE) ## compare with '...' above

Ответ 2

Чтобы получить максимум любого столбца, вам нужно что-то вроде:

max(ozone$Ozone, na.rm = TRUE)

Чтобы получить максимальное количество всех столбцов, вы хотите:

apply(ozone, 2, function(x) max(x, na.rm = TRUE))

И для сортировки:

ozone[order(ozone$Solar.R),]

Или для сортировки в другом направлении:

ozone[rev(order(ozone$Solar.R)),]

Ответ 3

В ответ на поиск максимального значения для каждого столбца вы можете попробовать использовать функцию apply():

> apply(ozone, MARGIN = 2, function(x) max(x, na.rm=TRUE))
  Ozone Solar.R    Wind    Temp   Month     Day 
   41.0   313.0    20.1    74.0     5.0     9.0 

Ответ 4

Здесь a dplyr решение:

library(dplyr)

# find max for each column
summarise_each(ozone, funs(max(., na.rm=TRUE)))

# sort by Solar.R, descending
arrange(ozone, desc(Solar.R))

UPDATE: summarise_each() устарел в пользу более функционального семейства функций: mutate_all(), mutate_at(), mutate_if(), summarise_all(), summarise_at(), summarise_if()

Вот как вы могли это сделать:

# find max for each column
ozone %>%
         summarise_if(is.numeric, funs(max(., na.rm=TRUE)))%>%
         arrange(Ozone)

или

ozone %>%
         summarise_at(vars(1:6), funs(max(., na.rm=TRUE)))%>%
         arrange(Ozone)

Ответ 5

Другим способом было бы использовать: pmax

do.call('pmax', c(as.data.frame(t(ozone)),na.rm=TRUE))
#[1]  41.0 313.0  20.1  74.0   5.0   9.0

Ответ 6

Предполагая, что ваши данные в data.frame называются maxinozone, вы можете сделать это

max(maxinozone[1, ], na.rm = TRUE)

Ответ 7

max(ozone$Ozone, na.rm = TRUE) должен сделать трюк. Не забудьте включить na.rm = TRUE, иначе R вернет NA.

Ответ 8

max(may$Ozone, na.rm = TRUE)

Без $Ozone он будет фильтроваться во всем кадре данных, это можно узнать в вихревой библиотеке.

Я тоже изучаю этот курс на Coursera ~

Ответ 9

Попробуйте это решение:

Oz<-subset(data, data$Month==5,select=Ozone) # select ozone  value in the month of                 
                                             #May (i.e. Month = 5)
summary(T)                                   #gives caracteristics of table( contains 1 column of Ozone) including max, min ...

Ответ 10

Существует пакет matrixStats, который предоставляет некоторые функции для выполнения кратких сводок столбцов и строк, см. в пакете vignette, но вам нужно преобразовать ваш data.frame в матрицу.

Затем вы запускаете: colMaxs(as.matrix(ozone))