4

c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10)SQL から使用の平均を取得しようとするAVGと、予想される 6.5 ではなく、5.2 の値が得られます。

# prepare data and write to file
write.table(data.frame(col1 = c(NA, NA, 3:10)),
        "my.na.txt", row.names = FALSE)

mean(c(NA, NA, 3:10), na.rm = TRUE) # 6.5

my.na <- read.csv.sql("my.na.txt", sep = " ",
        sql = "SELECT AVG(col1) FROM file") # 5.2

# this is identical to
sum(3:10)/10

unlink("my.na.txt") # remove file

これにより、 sql(df) は NA 値をゼロとして扱うと私は信じています。na.rm(Rで)引数を使用して実行できるように、SQL呼び出しでNA値を無視(除外)することは可能ですか?

4

3 に答える 3

7

NA値を無視するようにクエリを変更します。

SELECT AVG(col1)
FROM file
WHERE col1 IS NOT \"NA\"
于 2012-01-14T00:45:25.987 に答える
2

問題は、read.csv.sql関数が欠損値を認識せず、NULL ではなくゼロに変換することです。これは、最初にデータを data.frame にロードしてから呼び出した場合には発生しませんsqldf

d <- read.csv("my.na.txt")
sqldf("SELECT AVG(col1) FROM d") # 6.5
于 2012-01-14T01:00:24.780 に答える