6

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

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

样本中的 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)

但似乎没有任何效果!谁能帮帮我吗??

4

2 回答 2

13

如果你想排除非吸烟者,你有几个选择。最简单的可能是这样的:

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 等函数,轻拍,等等。

x <-as.numeric(bwght$cigs, rm="0")
mean(x)

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

于 2012-09-25T16:48:26.490 回答
1
mean(bwght[bwght$cigs>0,"cigs"])

我发现语句失败,返回“参数不是数字或逻辑:返回 NA”

转换为矩阵解决了这个问题:

mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))
于 2018-03-15T03:56:27.017 回答