【问题标题】:Conditional mean statement条件均值陈述
【发布时间】:2012-09-15 07:57:01
【问题描述】:

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

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

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

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

Mode      FALSE    TRUE    NA's 
logical    1176     212       0

我被要求在吸烟的女性(212)中找出cigs 的平均值。

我很难找到排除非吸烟者的正确语法 = 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)

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

【问题讨论】:

  • 我将您的问题重新标记为 R 问题,这将有助于它获得更多关注。我现在就给你写一个答案。

标签: r conditional-statements mean


【解决方案1】:

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

mean(bwght[bwght$cigs>0,"cigs"])

对于数据框,第一个变量是行,下一个是列。因此,您可以使用dataframe[1,2] 进行子集化以获得第一行第二列。您还可以在行选择中使用逻辑。通过使用bwght$cigs&gt;0 作为第一个元素,您将子集化为只有cigs 不为零的行。

由于以下原因,您的其他人无法正常工作:

mean(bwght$cigs| bwght$cigs>0)

这实际上是一个合乎逻辑的比较。您要求得到bwght$cigs OR bwght$cigs&gt;0 的真/假结果,然后对其取平均值。我不完全确定,但我认为 R 甚至不能将输入的数据作为 mean() 函数的逻辑类型。

mean(bwght$cigs>0 | bwght$cigs=TRUE)

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

if(bwght$cigs > 0){sum(bwght$cigs)}

您最初是一名 SAS 程序员吗?这看起来像我一开始的打字方式。基本上,if() 在 R 中的工作方式与在 SAS 中的工作方式不同。在该示例中,您使用bwght$cigs &gt; 0 作为 if 条件,这将不起作用,因为 R 只会查看由 bwght$cigs > 0 产生的向量的第一个元素。R 处理与 SAS 不同的循环 - 签出函数比如 lapply、tapply 等等。

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

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

【讨论】:

  • 非常感谢您的回答!它帮助了我的问题!
【解决方案2】:
mean(bwght[bwght$cigs>0,"cigs"])

我发现语句失败,返回“argument is not numeric or logical: returned NA”

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

mean(data.matrix(bwght[bwght$cigs>0,"cigs"]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多