Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中查找数据帧中列的最大值?_R_Max - Fatal编程技术网

如何在R中查找数据帧中列的最大值?

如何在R中查找数据帧中列的最大值?,r,max,R,Max,我有以下数据框,我称之为臭氧: 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

我有以下数据框,我称之为臭氧:

   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
我想从
臭氧
太阳能.R
中提取最高值

另外,如果可能的话,我将如何按降序排序
Solar.R
或此数据帧的任何列

我试过了

max(ozone, na.rm=T)
这给了我数据集中最高的值

我也试过了

max(subset(ozone,Ozone))
但是got
“子集”必须是逻辑的。“

我可以通过以下命令设置一个对象来保存每列的子集

ozone <- subset(ozone, Ozone >0)
max(ozone,na.rm=T) 
臭氧(0) 最大值(臭氧,na.rm=T) 但它给出了相同的值334,这是数据帧的最大值,而不是列的最大值


任何帮助都会很好,谢谢。

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

colMeans
colSums
等类似,您可以编写列最大值函数
colMax
,以及列排序函数
colSort

colMax <- function(data) sapply(data, max, na.rm = TRUE)
colSort <- function(data, ...) sapply(data, sort, ...)
对样本数据使用
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))
更新:
summary_each()
已被弃用,取而代之的是一个更具特色的函数系列:
mutate_all()
mutate_at()
mutate_if(),
summary_all()
summary_at()
summary_if()

以下是您可以做到的:

# find max for each column
ozone %>%
         summarise_if(is.numeric, 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 ...

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


然后运行:
colMaxs(as.matrix(ozone))

max(ozone$ozone)
max(subset(ozone,select=ozone))
。您肯定应该看看一些关于数据帧列索引的介绍性R材料,这是您的基本问题。(这是一个coursera问题,对吗?)@BenBolker是的。顺便说一句,你是如何将你的评论变成灰色的。我使用了背景标记“``(我肯定这里有格式方面的帮助?)。谢谢!我正在github上关注你,顺便说一句,课程的名称是现在。它是@BenBolker:这里有一个-通过单击“帮助”始终可用“注释框旁边的链接。你能详细说明一下这里发生了什么吗?当然,请在控制台中输入
?应用
,然后继续操作。”。该函数具有以下参数:
apply(X,MARGIN,FUN,…)
X
指的是您的数组,在本例中指的是数据帧<代码>边距
指定如何将函数应用于数据帧。例如,
1
表示行,
2
表示列
FUN
是您希望应用于所选
边距的功能。上面的答案创建了一个用户定义的函数,该函数在忽略NA值的情况下查找最大值。简言之,答案是在忽略NAs的情况下定位数据帧每列中的最大值。这很简单(+1),但值得注意的是,转换为“矩阵”,然后再转换回“data.frame”的速度很慢,
pmax
失去了其速度优势。(
apply
在“data.frame”上也较慢,原因相同)。例如,
DF=as.data.frame(矩阵(样本(100,1e6,T),1e2,1e4))
<代码>微基准::微基准(sappy(DF,max),do.call(pmax,as.data.frame(t(DF)),apply(DF,2,max),unlist(lappy(DF,max)),as.matrix(DF),as.data.frame(t(DF)),times=20)
。另外,很抱歉,这里的评论很长(部分不相关),但我确实喜欢
pmax
:)将您的输入强制为nums,因此
lappy
可能更可取。@Frank-没错。我真的不再在这附近做什么了。请随意编辑,我将使其成为一个社区Wiki,以获得所有列的最大值,它也可以是:
apply(ozone,2,max,na.rm=TRUE)
。对于较新的R版本。如果遇到警告消息:
funs()
从dplyr 0.8.0开始不推荐使用。请使用函数或lambda的列表:以下lambda代码适用于我:
ozone%>%summary\u if(is.numeric,list(~max(,na.rm=TRUE))
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 ...