Как рассчитать два отдельных средства для вектора с символами и числами? - PullRequest
0 голосов
/ 07 февраля 2020

Впервые на R .. Я создал переменную ИМТ и вставил ее с переменной пола, чтобы я мог видеть, какой ИМТ помечен как М (мужской) или F (женский). Как найти среднее для группы M и группы F отдельно?

Я пытался использовать функции substr и gsub для избавления от символов, но не уверен, что это решение, потому что тогда у меня нет возможности узнать, следует ли рассчитывать значение BMI как M или F.

edit:

Я хочу рассчитать средние значения для M и F отдельно, чтобы научиться выполнять простой анализ подгрупп. Я пытался изучать R независимо, и эта конкретная проблема ИМТ из старого набора проблем.

edit:

Я понимаю, почему здесь не работает вставка. Я рассматривал функцию paste как proc format в SAS.

set.seed(123)
sex <- sample(x = c("M", "F"), size = 100, replace = TRUE)
height.cm <- rnorm(n = 100, mean = ifelse(sex == "M", 175, 163), sd = 3)
weight.kg <- -110 + height.cm * 1.1 + rnorm(n = 100, sd = 7)
waist.in <- -20 + ifelse(sex == "M", 35, 33) + 0.5 * weight.kg + rnorm(n = 100, sd = 2.5)

bmi <- weight.kg / (height.cm / 100) ^ 2

bmi_sex <- paste(sex, bmi, sep = "")

1 Ответ

0 голосов
/ 07 февраля 2020

Вы можете вычислить среднее значение на основе bmi и sex переменной

tapply(bmi, sex, mean)

#       F        M 
#25.81020 27.14678 

. Нет необходимости в переменной bmi_sex, чтобы вычислить это, но если это то, как мы получаем ввод, мы можем использовать некоторое регулярное выражение для разделения пола и фактического значения bmi

tapply(as.numeric(sub(".(.*)", "\\1", bmi_sex)), sub("(.).*", "\\1", bmi_sex), mean)

#       F        M 
#25.81020 27.14678 

Мы можем написать функцию, чтобы получить значение bmi для одного пола за раз.

get_bmi <- function(bmi, sex, select_sex) {
   mean(bmi[sex == select_sex], na.rm = TRUE)
}

, а затем позвоните по номеру

get_bmi(bmi, sex, "F")
#[1] 25.8102
get_bmi(bmi, sex, "M")
#[1] 27.14678
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...