J'ai le cadre de données suivant que j'ai appelé ozone:
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
Je voudrais extraire la plus haute valeur de ozone
, Solar.R
, Wind
...
Aussi, si possible, comment pourrais-je trier Solar.R
ou n'importe quelle colonne de ce cadre de données par ordre décroissant
J'ai essayé
max(ozone, na.rm=T)
ce qui me donne la plus haute valeur de l'ensemble de données.
J'ai aussi essayé
max(subset(ozone,Ozone))
mais j'ai "subset" must be logical."
Je peux définir un objet pour contenir le sous-ensemble de chaque colonne, à l'aide des commandes suivantes
ozone <- subset(ozone, Ozone >0)
max(ozone,na.rm=T)
mais il donne la même valeur de 334, qui est la valeur maximale du bloc de données, pas la colonne.
Toute aide serait formidable, merci.
Semblable à colMeans
, colSums
, etc., vous pouvez écrire une fonction de maximum de colonne, colMax
, et une fonction de tri de colonne, colSort
.
colMax <- function(data) sapply(data, max, na.rm = TRUE)
colSort <- function(data, ...) sapply(data, sort, ...)
J'utilise ...
dans la deuxième fonction dans l'espoir de déclencher votre intrigue.
Obtenez vos données:
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")
Utilisez la fonction colMax
sur des exemples de données:
colMax(dat)
# Ozone Solar.R Wind Temp Month Day
# 41.0 313.0 20.1 74.0 5.0 9.0
Pour faire le tri sur une seule colonne,
sort(dat$Solar.R, decreasing = TRUE)
# [1] 313 299 190 149 118 99 19
et sur toutes les colonnes, utilisez notre fonction colSort
,
colSort(dat, decreasing = TRUE) ## compare with '...' above
Pour obtenir le maximum de n'importe quelle colonne, vous voulez quelque chose comme:
max(ozone$Ozone, na.rm = TRUE)
Pour obtenir le maximum de toutes les colonnes, vous voulez:
apply(ozone, 2, function(x) max(x, na.rm = TRUE))
Et pour trier:
ozone[order(ozone$Solar.R),]
Ou pour trier l’autre direction:
ozone[rev(order(ozone$Solar.R)),]
Voici une solution 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()
est devenu obsolète au profit d'une famille de fonctions plus complète: mutate_all()
, mutate_at()
, mutate_if()
, summarise_all()
, summarise_at()
, summarise_if()
Voici comment vous pourriez faire:
# find max for each column
ozone %>%
summarise_if(is.numeric, funs(max(., na.rm=TRUE)))%>%
arrange(Ozone)
ou
ozone %>%
summarise_at(vars(1:6), funs(max(., na.rm=TRUE)))%>%
arrange(Ozone)
En réponse à la recherche de la valeur maximale pour chaque colonne, vous pouvez essayer d'utiliser la fonction 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
Une autre façon serait d'utiliser? 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
En supposant que vos données dans data.frame
appelé maxinozone
, vous pouvez le faire
max(maxinozone[1, ], na.rm = TRUE)
max(ozone$Ozone, na.rm = TRUE)
devrait faire l'affaire. N'oubliez pas d'inclure le na.rm = TRUE
ou bien R retournera NA.
Essayez cette solution:
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)
Sans $Ozone
, il filtrera dans tout le cadre de données, cela peut être appris dans la bibliothèque swirl.
J'étudie aussi ce cours sur Coursera ~
Il existe un paquetage matrixStats
qui fournit des fonctions permettant de faire des résumés de colonnes et de lignes, voir dans le paquetage vignette , mais vous devez convertir votre data.frame en matrice.
Ensuite, vous lancez: colMaxs(as.matrix(ozone))