web-dev-qa-db-ja.com

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が得られます。これは、列ではなく、データフレームの最大値です。

どんな助けも素晴らしいでしょう、ありがとう。

55
Alfonso Vergara

colMeanscolSumsなどと同様に、列最大関数colMaxと列ソート関数colSortを作成できます。

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

あなたの陰謀を刺激することを期待して、2番目の関数で...を使用します。

データを取得する:

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
51
Rich Scriven

任意の列の最大値を取得するには、次のようなものが必要です。

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

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

PDATE: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)
7
rrs

各列の最大値を見つけることに応じて、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 
6
ccapizzano

別の方法は?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
2
akrun

data.frameのデータがmaxinozoneと呼ばれると仮定すると、これを行うことができます

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

max(ozone$Ozone, na.rm = TRUE)はトリックを行う必要があります。 na.rm = TRUEを含めることを忘れないでください。そうしないと、RはNAを返します。

0
WallyTaylor

この解決策を試してください:

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 ...
0
S.ElBahloul
max(may$Ozone, na.rm = TRUE)

$Ozoneがなければ、データフレーム全体でフィルタリングされますが、これはswirlライブラリで学習できます。

私もこのコースをCourseraで勉強しています〜

0
markcodd

パッケージmatrixStatsがあり、列と行の要約を行うためのいくつかの機能を提供します。パッケージ vignette を参照してください。ただし、data.frameをマトリックスに変換する必要があります。

次に、実行します:colMaxs(as.matrix(ozone))

0
eddy85br