条件均值声明

时间:2012-09-23 18:43:52

标签: r conditional-statements mean

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

当我使用以下公式计算数据集cigsbwght的平均值时: 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)

但似乎没有任何作用!有人可以帮帮我吗?

2 个答案:

答案 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"]))