Je suis nouveau dans R, donc cela peut être évident.
Le code que j'ai jusqu'à présent:
heightmen = kdata$height[kdata$gender=="Man"] mean(heightmen)
Voici l'ensemble de données:
gender shoe height colour Man 43 176 Green Woman 36 166 Brown Man 43 182 Other Man 36 151 Brown Woman 43 183 Blue Man 44 184 Blue Woman 38 164 Brown Woman 37 160 Brown Man 41 175 Brown
J'essaye de trouver la moyenne et la médiane pour chaque sexe.
Je pensais peut-être à quelque chose comme ceci:
rm(list=ls()) kdata = read.table("data_fra_klassen_v20.txt",header = TRUE,) library(openxlsx) kdata = read.xlsx("data_fra_klassen_v20.xlsx") head(kdata)
Cependant, il semble qu'il ne trouve aucune valeur.
3 Réponses :
Vous pouvez le faire en utilisant le package dplyr
dans R:
En utilisant mutate
:
df <- structure(list(gender = structure(c(1L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 1L), .Label = c("Man", "Woman"), class = "factor"), shoe = c(43L,36L, 43L, 36L, 43L, 44L, 38L, 37L, 41L), height = c(176L, 166L,182L, 151L, 183L, 184L, 164L, 160L, 175L), colour = structure(c(3L,2L, 4L, 2L, 1L, 1L, 2L, 2L, 2L), .Label = c("Blue", "Brown", "Green", "Other"), class = "factor")), class = "data.frame", row.names = c(NA,-9L))
Ou en utilisant summarise
:
df %>% group_by(gender) %>% summarise(mean_height = mean(height), median_height = median(height)) # A tibble: 2 x 3 # Groups: gender [2] # gender mean_height median_height #<fct> <dbl> <dbl> #1 Man 174. 176 #2 Woman 168. 165
library(dplyr) df %>% group_by(gender)%>% mutate(mean_height = mean(height))%>% mutate(median_height = median(height)) %>% select(gender, mean_height, median_height) %>% unique()
@Ben utilisez ce premier install.packages ("tidyverse")
puis exécutez le code ci-dessus.
Je pense qu'il serait peut-être préférable d'utiliser summary
au lieu de mutate
pour obtenir la moyenne par sexe.
Cela semble l'avoir réglé.
Je vais voir si c'est mieux @ JonathanV.Solórzano
Autre solution similaire à votre code précédent, mais utilisant subset
.
mean(subset(kdata,gender == "Man")$height) mean(subset(kdata,gender == "Woman")$height)
essayez ceci
library(dplyr) kdata %>% group_by(gender) %>% summarise(median = quantile(height, 0.5), mean = mean(height))
Que voulez-vous dire qu'il ne trouve aucune valeur? Je ne vois pas pourquoi - votre code me donne 173,6
En fait, votre code devrait fonctionner correctement. Vérifiez si vos colonnes sont au bon format, en particulier
class (kdata $ height)
doit produire"numeric"
ou"integer"
. Pour contourner le problème, essayezas.numeric (as.character (kdata $ height)) [kdata $ gender == "Man"]
.@ jay.sf Quelqu'un m'a donné une autre solution, cependant, je vais expérimenter ce que vous avez dit afin que je puisse mieux comprendre r.