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