条件均值声明

use*_*092 5 r mean conditional-statements

我有一个名为的数据集bwght,其中包含变量cigs(每天抽烟的香烟)

当我使用: 计算cigs数据集中的平均值时,我得到一个数字2.08.bwghtmean(bwght$cigs)

样本中1388名妇女中只有212名吸烟(1176名不吸烟):

summary(bwght$cigs>0) 给出结果:

Mode      FALSE    TRUE    NA's 
logical    1176     212       0
Run Code Online (Sandbox Code Playgroud)

我被要求找出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)

但似乎没有任何作用!谁能帮帮我吗??

TAR*_*man 8

如果您想排除不吸烟者,您可以选择几种方式.最简单的可能就是:

mean(bwght[bwght$cigs>0,"cigs"])
Run Code Online (Sandbox Code Playgroud)

对于数据框,第一个变量是行,下一个是列.因此,您可以使用子集dataframe[1,2]来获取第一行,第二列.您还可以在行选择中使用逻辑.通过使用bwght$cigs>0第一个元素,您将子集化为仅具有cigs不为零的行.

你的其他人没有工作,原因如下:

mean(bwght$cigs| bwght$cigs>0)
Run Code Online (Sandbox Code Playgroud)

这实际上是一种逻辑比较.你要求得到TRUE/FALSE的结果bwght$cigs OR bwght$cigs>0,然后取平均值.我不完全确定,但我认为R甚至不能将数据类型视为该mean()函数的逻辑.

mean(bwght$cigs>0 | bwght$cigs=TRUE)
Run Code Online (Sandbox Code Playgroud)

同样的问题.你使用|符号,它返回一个逻辑,而R试图取逻辑的均值.

if(bwght$cigs > 0){sum(bwght$cigs)}
Run Code Online (Sandbox Code Playgroud)

无论如何,你最初是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)
Run Code Online (Sandbox Code Playgroud)

老实说,我不知道这会做什么.如果rm="0"没有引号可能会有用......?