我有一个名为bwght
的数据集,其中包含变量cigs
(每天抽烟的香烟)
当我使用以下公式计算数据集cigs
中bwght
的平均值时:
mean(bwght$cigs)
,我得到一个数字2.08。
样本中1388名妇女中只有212名吸烟(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 :(得分:8)
如果您想排除不吸烟者,您可以选择几种方式。最简单的可能就是:
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
的TRUE / FALSE结果,然后取平均值。我不完全确定,但我认为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&gt;产生的向量的第一个元素。 0. R处理与SAS不同的循环 - 检查lapply,tapply等函数。
x <-as.numeric(bwght$cigs, rm="0")
mean(x)
老实说,我不知道这会做什么。如果rm="0"
没有引号,可能会有效吗?
答案 1 :(得分:0)
mean(bwght[bwght$cigs>0,"cigs"])
我发现语句失败,返回&#34;参数不是数字或逻辑:返回NA&#34;
转换为矩阵解决了这个问题:
mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))