2012-09-23 6 views
4

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

Когда я вычислить среднее 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)

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

+0

Я отвел ваш вопрос как вопрос R, который поможет ему получить дополнительное внимание. Я напишу вам ответ прямо сейчас. – TARehman

ответ

6

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

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

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

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

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

Это эффективно логическое сравнение. Вы запрашиваете TRUE/FALSE результат 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, tapply и т. Д.

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

Честно говоря, я не знаю, как это будет. Это может сработать, если у rm="0" нет котировок ...?

+0

Большое спасибо за ваш ответ! Это помогло моей проблеме! – user1626092