49

欠損値のある単純なデータ フレームを次に示します。

M = data.frame( Name = c('name', 'name'), Col1 = c(NA, 1) , Col2 = c(1, 1))
#   Name Col1 Col2
# 1 name   NA    1
# 2 name    1    1

メソッドを使用してグループ(「名前」)ごとに変数aggregateを使用する場合:sumformula

aggregate(. ~ Name, M, FUN = sum, na.rm = TRUE)

結果は次のとおりです。

# RowName Col1 Col2
#    name    1    1

したがって、 がある最初の行全体NAが無視されます。ただし、「non- formula」仕様を使用する場合:

aggregate(M[, 2:3], by = list(M$Name), FUN = sum, na.rm = TRUE)

結果は次のとおりです。

# Group.1 Col1 Col2
#    name    1    2

ここでは、(1,1) エントリのみが無視されます。

これら 2 つの呼び出しは同等であると考えていたため、コードの 1 つで大きなデバッグの頭痛の種になりました。formulaエントリー方法が異なる理由はありますか?

ありがとう。

4

2 に答える 2

19

式のバージョンを同等にしたい場合は、これを試してください:

M = data.frame( Name = rep('name',5), Col1 = c(NA,rep(1,4)) , Col2 = rep(1,5))
aggregate(. ~ Name, M, function(x) sum(x, na.rm=TRUE), na.action = na.pass)
于 2013-05-30T20:02:19.800 に答える