Преобразование целого числа и вычисление среднего значения в R, но все равно не работает - PullRequest
0 голосов
/ 31 января 2019

У меня есть целочисленная переменная.Обычно после преобразования в числовое значение я могу рассчитать среднее значение.Но на этот раз я конвертирую, используя этот код, но все еще не работает.Кто-нибудь знает в чем проблема?Спасибо

Пример значения переменной NPVC_m1 выглядит так:

771]  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0  52524847.0

 [781]  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6  70026530.6

 [791]  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7  87524914.7

 [801]  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1  46418440.1

 [811]  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5  92833975.5

 [821] 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0 139000000.0

 [831] 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0 186000000.0

 [841] 232000000.0 232000000.0 232000000.0

typeof(NPVC_m1)

[1] "integer"

> NPVC_m1 <- as.numeric(as.character(NPVC_m1))

> typeof(NPVC_m1)

[1] "double"

> meanNPV <- aggregate(NPVC_m1 ~ Region + Model, subsetfinal, mean)


Warning messages:

1: In mean.default(X[[i]], ...) :
  argument is not numeric or logical: returning NA

2: In mean.default(X[[i]], ...) :
  argument is not numeric or logical: returning NA

3: In mean.default(X[[i]], ...) :
  argument is not numeric or logical: returning NA

1 Ответ

0 голосов
/ 31 января 2019

Я не понимаю, как числа, которые вы показываете в своем вопросе, могут быть целыми числами:

> x <- c(52524847.0, 52524847.0, 52524847.0, 52524847.0, 52524847.0, 52524847.0,
+        52524847.0, 52524847.0, 52524847.0, 52524847.0, 70026530.6, 70026530.6,
+        70026530.6, 70026530.6, 70026530.6, 70026530.6, 70026530.6, 70026530.6,
+        70026530.6, 70026530.6, 87524914.7, 87524914.7, 87524914.7, 87524914.7,
+        87524914.7, 87524914.7, 87524914.7, 87524914.7, 87524914.7, 87524914.7,
+        46418440.1, 46418440.1, 46418440.1, 46418440.1, 46418440.1, 46418440.1,
+        46418440.1, 46418440.1, 46418440.1, 46418440.1, 92833975.5, 92833975.5,
+        92833975.5, 92833975.5, 92833975.5, 92833975.5, 92833975.5, 92833975.5,
+        92833975.5, 92833975.5, 139000000.0, 139000000.0, 139000000.0,
+        139000000.0, 139000000.0, 139000000.0, 139000000.0, 139000000.0,
+        139000000.0, 139000000.0, 186000000.0, 186000000.0, 186000000.0,
+        186000000.0, 186000000.0, 186000000.0, 186000000.0, 186000000.0,
+        186000000.0, 186000000.0,  232000000.0, 232000000.0, 232000000.0)
> as.integer(x)
 [1]  52524847  52524847  52524847  52524847  52524847  52524847  52524847  52524847
 [9]  52524847  52524847  70026530  70026530  70026530  70026530  70026530  70026530
[17]  70026530  70026530  70026530  70026530  87524914  87524914  87524914  87524914
[25]  87524914  87524914  87524914  87524914  87524914  87524914  46418440  46418440
[33]  46418440  46418440  46418440  46418440  46418440  46418440  46418440  46418440
[41]  92833975  92833975  92833975  92833975  92833975  92833975  92833975  92833975
[49]  92833975  92833975 139000000 139000000 139000000 139000000 139000000 139000000
[57] 139000000 139000000 139000000 139000000 186000000 186000000 186000000 186000000
[65] 186000000 186000000 186000000 186000000 186000000 186000000 232000000 232000000
[73] 232000000

Как видите, приведение ваших чисел к целым числам усекает десятичные разряды .

Обратите внимание, что as.integer() не не округляет число:

> 70026530.6
[1] 70026531
> as.integer(70026530.6)
[1] 70026530
> options(digits=10)  # to force display of decimal places
> 70026530.6
[1] 70026530.6
> as.integer(70026530.6)
[1] 70026530

Кроме того, я довольно легко могу вычислить среднее целых чисел:

>     x <- c(4, 5, 6, 6)
>     typeof(x)
[1] "double"
>     x <- as.integer(x)
>     typeof(x)
[1] "integer"
>     mean(x)
[1] 5.25

Я также могу aggregate() означает:

> subsetfinal <- data.frame(NPVC_m1 = x,
                            Region = rep(c("A", "B"), c(36, 37)),
                            Model = c(rep(c("one", "two", "three"), 24), "one"))

> aggregate(NPVC_m1 ~ Region + Model, subsetfinal, mean)
  Region Model      NPVC_m1
1      A   one  64632550.34
2      B   one 135718369.75
3      A three  67549222.65
4      B three 139243363.88
5      A   two  66091023.98
6      B   two 135396195.18

Поэтому ваша проблема должна быть не связана с типом или классом чисел, которые вы показываете в своем вопросе.

Пожалуйста, создайте пример данных, которые позволят нам воспроизвести вашу проблему и включите ее в ваш вопрос.


typeof(NPVC_m1) возвращает "integer" или "double".Но что возвращает class(subsetfinal$NPVC_m1)? Как заметил @Roland (см. Комментарии ниже), ваша переменная может быть фактором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...