Условное среднее утверждение

У меня есть набор данных с именем bwght, который содержит переменную cigs (количество выкуренных сигарет в день).

Когда я вычисляю среднее значение cigs в наборе данных bwght, используя: mean(bwght$cigs), я получаю число 2,08.

Только 212 из 1388 женщин в выборке курят (и 1176 не курят):

summary(bwght$cigs>0) дает результат:

Mode      FALSE    TRUE    NA's 
logical    1176     212       0

Меня попросили найти среднее значение cigs среди курящих женщин (212).

Мне трудно найти правильный синтаксис для исключения некурящих = 0, который я пробовал:

  • mean(bwght$cigs| bwght$cigs>0)

  • mean(bwght$cigs>0 | bwght$cigs=TRUE)

  • if (bwght$cigs > 0){ sum(bwght$cigs) }

  • x <-as.numeric(bwght$cigs, rm="0"); mean(x)

Но ничего не работает! Кто-нибудь может мне помочь, пожалуйста??


person user1626092    schedule 23.09.2012    source источник
comment
Я пометил ваш вопрос как вопрос R, что поможет привлечь к нему дополнительное внимание. Я напишу вам ответ прямо сейчас.   -  person TARehman    schedule 25.09.2012


Ответы (2)


Если вы хотите исключить некурящих, у вас есть несколько вариантов. Самое простое, наверное, это:

mean(bwght[bwght$cigs>0,"cigs"])

Во фрейме данных первой переменной является строка, а следующей — столбец. Итак, вы можете подмножество, используя dataframe[1,2], чтобы получить первую строку, второй столбец. Вы также можете использовать логику в выборе строки. Используя bwght$cigs>0 в качестве первого элемента, вы подмножаете только те строки, где cigs не равно нулю.

Другие ваши не работали по следующим причинам:

mean(bwght$cigs| bwght$cigs>0)

Это действительно логическое сравнение. Вы запрашиваете ИСТИННЫЙ / ЛОЖНЫЙ результат bwght$cigs OR bwght$cigs>0, а затем берете среднее значение. Я не совсем уверен, но я думаю, что R даже не может считать типизированные данные логическими для функции mean().

mean(bwght$cigs>0 | bwght$cigs=TRUE)

Та же проблема. Вы используете знак |, который возвращает логическое значение, а R пытается получить среднее значение логических значений.

if(bwght$cigs > 0){sum(bwght$cigs)}

Вы, случайно, изначально не были программистом SAS? Это похоже на то, как я печатал сначала. По сути, if() работает в R не так, как в SAS. В этом примере вы используете bwght$cigs > 0 в качестве условия if, которое не будет работать, потому что R будет смотреть только на первый элемент вектора, полученного из bwght$cigs > 0. R обрабатывает цикл иначе, чем SAS — проверьте такие функции, как lapply , постукивание и так далее.

x <-as.numeric(bwght$cigs, rm="0")
mean(x)

Я честно не знаю, что это даст. Это могло бы сработать, если бы rm="0" не было кавычек...?

person TARehman    schedule 25.09.2012
comment
Большое спасибо за ответ! Моей проблеме помогло!! - person user1626092; 18.10.2012

mean(bwght[bwght$cigs>0,"cigs"])

Я обнаружил, что оператор не выполнен, возвращая «аргумент не является числовым или логическим: возвращается NA»

Преобразование в матрицу решило это:

mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))
person Grant    schedule 15.03.2018