質問

平均して取得しようとすると c(NA, NA, 3, 4, 5, 6, 7, 8, 9, 10) 使用 AVG SQLから、予想される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値をゼロとして扱うと信じさせます。 SQLコールでNA値を無視する(除外)na値を使用して実行できるため、 na.rm 議論(r)?

役に立ちましたか?

解決

クエリを変更して無視します NA 値:

SELECT AVG(col1)
FROM file
WHERE col1 IS NOT \"NA\"

他のヒント

問題は、 read.csv.sql 関数は欠損値を認識せず、nullではなくゼロに変換します。これは、最初にデータをdata.frameにロードし、次に呼び出してのみ発生しません。 sqldf.

d <- read.csv("my.na.txt")
sqldf("SELECT AVG(col1) FROM d") # 6.5
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top