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)
但似乎没有任何作用!谁能帮帮我吗??
如果您想排除不吸烟者,您可以选择几种方式.最简单的可能就是:
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"没有引号可能会有用......?