web-dev-qa-db-ja.com

条件付き平均ステートメント

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

データセットcigsbwghtの平均を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)

しかし、何も機能していないようです!誰か助けてくれませんか?

5
user1626092

非喫煙者を除外したい場合は、いくつかのオプションがあります。最も簡単なのはおそらくこれです:

_mean(bwght[bwght$cigs>0,"cigs"])
_

データフレームの場合、最初の変数は行で、次の変数は列です。したがって、_dataframe[1,2]_を使用してサブセット化し、最初の行、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で実行されます。この例では、if条件として_bwght$cigs > 0_を使用していますが、Rはbwght $ cigs> 0の結果であるベクトルの最初の要素のみを参照するため、機能しません。Rはループを処理します。 SASとは異なります-lapply、tapplyなどの関数をチェックしてください。

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

私は正直なところ、これが何をするのかわかりません。 _rm="0"_に引用符がない場合は機能する可能性があります...?

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

ステートメントが失敗し、「引数が数値でも論理でもない:NAを返す」というメッセージが返されました。

行列への変換はこれを解決しました:

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