Если вы хотите исключить некурящих, у вас есть несколько вариантов. Самый простой, вероятно, это:
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"
нет котировок ...?
Я отвел ваш вопрос как вопрос R, который поможет ему получить дополнительное внимание. Я напишу вам ответ прямо сейчас. – TARehman