2017-07-05 31 views
0

Rでsqldfを使用すると、2つのコマンドが異なる結果になるのはなぜですか?R、sqldfと平均平均の平均値

sqldf('select species, 
    avg([Petal.Width]/[Petal.Length]) 
    as petalratio from iris group by species') 

sqldf('select species, 
    ([Petal.Width]/[Petal.Length]) 
    as petalratio from iris group by species') 

3つの種のそれぞれの平均の割合を求めることが目的であることを確認してください。

答えて

2

このクエリは、集計関数avgを使用している場合の1種あたりの平均値を出力します。

select species, 
([Petal.Width]/[Petal.Length]) as petalratio 
from iris 
group by species 

このクエリは、集計関数を使用していないため、種ごとに1つの行をランダムに出力します。これはほとんどのデータベースでは許可されていませんが、デフォルトのデータベースsqldfが使用するSQLiteでは許可されています。

avgで最初のクエリを使用する必要があります。

+1

ボトムクエリが失敗しないのは不思議です。信頼できない結果。他のRDBMSがそれを捕まえるでしょう。もちろん、MySQLは 'only_full_group_by'をオフにして、新しいユーザに間違った方法でSQLを導入します! – Parfait

+1

SQLiteでは、2番目のクエリは、各種の最後の行のPetal.Width/Petal.Lengthの比率を出力します。 –

+0

これらのコメントはともに非常に役に立ちました。特に@G.Grothendieck! – vashts85