2017-10-14 6 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