如何在 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

我想提取最高的价值从 ozoneSolar.RWind..。

此外,如果可能的话,我将如何排序 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,这是数据帧的最大值,而不是列的最大值。

任何帮助都可以,谢谢。

303824 次浏览

为了找到每列的最大值,您可以尝试使用 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

为了得到你想要的任何列的最大值,可以这样做:

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)),]

colMeanscolSums等类似,您可以编写列最大值函数 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

这里有一个 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))

更新: 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)

另一种方法是使用? 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

max(ozone$Ozone, na.rm = TRUE)应该可以。记住要包括 na.rm = TRUE,否则 R 将返回 NA。

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

如果没有 $Ozone,它将在整个数据帧中过滤,这可以在漩涡库中学习。

我也在 Coursera 上学习这门课程

假设您在 data.frame中的数据称为 maxinozone,您可以这样做

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

试试这个办法:

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 ...

有一个包 matrixStats提供了一些函数来进行列和行汇总,参见包 Vignette,但是您必须将 data.frame 转换为矩阵。

然后你跑: colMaxs(as.matrix(ozone))