我有一个名为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

我被要求找出吸烟女性(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)

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

    最佳答案

    如果要排除不吸烟者,则有几种选择。最简单的可能是这样的:

    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> 0导致的向量的第一个元素。R处理与SAS不同的循环- checkout lapply之类的函数,轻按,等等。
    x <-as.numeric(bwght$cigs, rm="0")
    mean(x)
    

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

    关于r - 条件均值陈述,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12555179/

    10-12 16:45