#r #csv #data-analysis #median
Вопрос:
Я пытаюсь найти медиану weight
столбца в этом примере csv-файла, используя R
. Но код ничего не возвращает. В чем проблема?
diabets <- read.csv ("https://hbiostat.org/data/repo/diabetes.csv")
median (diabets$weight)
А затем, найдя медиану, мне нужно напечатать женщин, вес которых ниже этой медианы. Как я могу это сделать?
Пожалуйста, никаких дополнительных библиотек.
Ответ №1:
na.rm = TRUE
аргумент найдет медиану, игнорирующую NA
, что есть единица NA
в весах.
sum(is.na(diabetes$weight))
[1] 1
И median(diabetes$weight, na.rm = TRUE)
возвращает 172,5, так что,
diabetes[diabetes$gender== "female" amp; diabetes$weight < 172.5, ]
выведет женщин, чей вес ниже этой медианы.
Добавить
med <- median(diabetes$weight, na.rm = TRUE)
diabetes[(diabetes$gender== "female" amp; diabetes$weight < med), ]
или
diabetes[(diabetes$gender== "female" amp; diabetes$weight < median(diabetes$weight, na.rm = TRUE)), ]
Комментарии:
1. Медиана выглядит хорошо. Но когда я добавляю эту строку, чтобы напечатать те, которые меньше 172,5, она также печатает те, которые больше и мужского пола! Странный.
6 1008 248 94 69 3.6 4.81 Buckingham 34 male 71 190
2. Вот код:
diabetes <- read.csv ("https://hbiostat.org/data/repo/diabetes.csv") diabetes[diabetes$gender== "female" amp;amp; diabetes$weight < 172.5, ]
3. @TinaJ Мне очень жаль. Только один
amp;
должен был быть зашифрован.diabetes[diabetes$gender== "female" amp; diabetes$weight < 172.5, ]
. Я редактирую свой код и приношу извинения за путаницу.4. Круто работает сейчас. И как я могу передать медианный var вместо явного указания 172,5?
Ответ №2:
library(dplyr)
diabets %>%
filter(gender == "female") %>%
filter(weight < median(weight, na.rm = TRUE))
# A tibble: 123 x 19
id chol stab.glu hdl ratio glyhb location age gender height weight frame bp.1s bp.1d
<int> <int> <int> <int> <dbl> <dbl> <chr> <int> <chr> <int> <int> <chr> <int> <int>
1 1000 203 82 56 3.60 4.31 Buckingh~ 46 female 62 121 medi~ 118 59
2 1024 242 82 54 4.5 4.77 Louisa 60 female 65 156 medi~ 130 90
3 1030 238 75 36 6.60 4.47 Louisa 27 female 60 170 medi~ 130 80
4 1031 183 79 46 4 4.59 Louisa 40 female 59 165 medi~ NA NA
5 1036 213 83 47 4.5 3.41 Louisa 33 female 65 157 medi~ 130 90
6 1271 228 66 45 5.10 4.61 Buckingh~ 24 female 61 113 medi~ 100 70
7 1277 179 80 92 1.90 4.18 Buckingh~ 41 female 72 118 small 144 112
8 1282 254 84 52 4.90 4.52 Buckingh~ 43 female 62 145 medi~ 125 70
9 1317 136 81 51 2.70 4.58 Buckingh~ 22 female 66 160 large 105 85
10 1321 218 68 46 4.70 3.89 Buckingh~ 52 female 62 170 medi~ 142 79
# ... with 113 more rows, and 5 more variables: bp.2s <int>, bp.2d <int>, waist <int>,
# hip <int>, time.ppn <int>
Комментарии:
1. Я не могу использовать дополнительные библиотеки.
2. Вы также можете продолжать складывать фильтры вместо многократного вызова функции —
diabets %>% filter(gender == "female", weight < median(weight, na.rm = TRUE))