オゾンと呼ばれる次のデータフレームがあります。
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が得られます。これは、列ではなく、データフレームの最大値です。
どんな助けも素晴らしいでしょう、ありがとう。
colMeans
、colSums
などと同様に、列最大関数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
任意の列の最大値を取得するには、次のようなものが必要です。
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)),]
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)
各列の最大値を見つけることに応じて、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
別の方法は?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
data.frame
のデータがmaxinozone
と呼ばれると仮定すると、これを行うことができます
max(maxinozone[1, ], na.rm = TRUE)
max(ozone$Ozone, na.rm = TRUE)
はトリックを行う必要があります。 na.rm = TRUE
を含めることを忘れないでください。そうしないと、RはNAを返します。
この解決策を試してください:
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 ...
max(may$Ozone, na.rm = TRUE)
$Ozone
がなければ、データフレーム全体でフィルタリングされますが、これはswirlライブラリで学習できます。
私もこのコースをCourseraで勉強しています〜
パッケージmatrixStats
があり、列と行の要約を行うためのいくつかの機能を提供します。パッケージ vignette を参照してください。ただし、data.frameをマトリックスに変換する必要があります。
次に、実行します:colMaxs(as.matrix(ozone))