Если вы хотите исключить некурящих, у вас есть несколько вариантов. Самое простое, наверное, это:
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