1
votes

R calcul de la moyenne et de la médiane à partir du fichier local

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 commentaires

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, essayez as.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.


3 Réponses :


1
votes

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

données

library(dplyr)
df %>% 
  group_by(gender)%>% 
  mutate(mean_height = mean(height))%>% 
  mutate(median_height = median(height)) %>% 
  select(gender, mean_height, median_height) %>% 
  unique()


4 commentaires

@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



1
votes

Autre solution similaire à votre code précédent, mais utilisant subset.

mean(subset(kdata,gender == "Man")$height)
mean(subset(kdata,gender == "Woman")$height)


0 commentaires

0
votes

essayez ceci

library(dplyr)
kdata  %>% group_by(gender) %>% summarise(median = quantile(height, 0.5), mean = mean(height))


0 commentaires