6

bwght変数を含む名前のデータセットがありますcigs(1日あたりの喫煙タバコ数)

を使用 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]て、最初の行、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 に答える