2017-10-14 10 views
-2

私は約3,000行のデータセットを持っています。データはhttps://pastebin.com/i4dYCUQXdplyrの集計:集計:NA値

によってアクセスすることができます問題:出力にはNAがありますが、データにはNAが存在しません。ここで私はdplyrまたは集約を介してカラムの各カテゴリで合計値を合計しようとすると何が起こるかです:

example <- read.csv("https://pastebin.com/raw/i4dYCUQX", header=TRUE, sep=",") 
example 

# dplyr 
example %>% group_by(size) %>% summarize_at(vars(volume), funs(sum)) 

Out: 
# A tibble: 4 x 2 
     size volume 
     <fctr>  <int> 
1 Extra Large  NA 
2  Large  NA 
3  Medium 937581572 
4  Small  NA 

# aggregate 
aggregate(volume ~ size, data=example, FUN=sum) 

Out: 
     size volume 
1 Extra Large  NA 
2  Large  NA 
3  Medium 937581572 
4  Small  NA 

colSumsを経由して値にアクセスしようと、動作しているようです:

# Colsums 
small <- example %>% filter(size == "Small") 
colSums(small["volume"], na.rm = FALSE, dims = 1) 

Out: 
volume 
3869267348 

誰でも問題を想像することはできますか?

+2

私は_警告メッセージを信じています。かなり情報的です: '[...]整数のオーバーフロー - 和を使用して(as.numeric()) ' – Henrik

答えて

1

注意すべき最初の事はあなたの例を実行している、私が得る、ということです

example <- read.csv("https://pastebin.com/raw/i4dYCUQX", header=TRUE, sep=",") 
# dplyr 
example %>% group_by(size) %>% summarize_at(vars(volume), funs(sum)) 
#> Warning in summarise_impl(.data, dots): integer overflow - use 
#> sum(as.numeric(.)) 

#> Warning in summarise_impl(.data, dots): integer overflow - use 
#> sum(as.numeric(.)) 

#> Warning in summarise_impl(.data, dots): integer overflow - use 
#> sum(as.numeric(.)) 
#> # A tibble: 4 × 2 
#>   size volume 
#>  <fctr>  <int> 
#> 1 Extra Large  NA 
#> 2  Large  NA 
#> 3  Medium 937581572 
#> 4  Small  NA 

は、合計が整数型をオーバーフローしていることを明確に述べています。警告メッセージが示唆するように、私たちがしなければ、我々は数値に整数に変換してから合計することができます:ここ


example <- read.csv("https://pastebin.com/raw/i4dYCUQX", header=TRUE, sep=",") 
# dplyr 
example %>% group_by(size) %>% summarize_at(vars(volume), funs(sum(as.numeric(.)))) 
#> # A tibble: 4 × 2 
#>   size  volume 
#>  <fctr>  <dbl> 
#> 1 Extra Large 3609485056 
#> 2  Large 11435467097 
#> 3  Medium 937581572 
#> 4  Small 3869267348 

funs(sum)それぞれにsumを実行すると同じですfuns(sum(as.numeric(.))、置き換えられています最初はnumericに変換されます。

+0

ありがとうございました!だから、intには限界がありますか? – Christopher

1

その値は整数であり、ここでは複数のチェックについては、数値ではない

example$volume <- as.numeric(example$volume) 

aggregate(volume ~ size, data=example, FUN=sum) 

     size  volume 
1 Extra Large 3609485056 
2  Large 11435467097 
3  Medium 937581572 
4  Small 3869267348 

ですので:

What is integer overflow in R and how can it happen?

+0

ありがとう、それも助けてくれました! – Christopher