Неправильный результат среднего с dplyr

Я новичок в R, и у меня есть большой data.frame (более 300000 obs), который выглядит так:

Dados <- data.frame(stringsAsFactors=FALSE,
               id = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L,
                      14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L,
                      25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L,
                      37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L,
                      49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L,
                      61L, 62L, 63L, 64L, 65L, 66L, 67L, 68L, 69L, 70L, 71L,
                      72L, 73L, 74L, 75L, 76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L,
                      84L, 85L, 86L, 87L, 88L, 89L, 90L, 91L, 92L, 93L, 94L, 95L,
                      96L, 97L, 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L,
                      106L, 107L, 108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L,
                      116L, 117L, 118L, 119L, 120L, 121L, 122L, 123L, 124L, 125L,
                      126L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L,
                      136L, 137L, 138L, 139L, 140L, 141L, 142L, 143L),
   Identification = "LONNIE POOL FIELD WEAVERVILLE",
            Dates = c("1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014", "1/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014", "2/01/2014",
                      "2/01/2014", "2/01/2014", "2/01/2014"),
     TEMP_Celcius = c(13L, 10L, 8L, 7L, 5L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 0L, 0L,
                      0L, 0L, 0L, 0L, 0L, 0L, -1L, -1L, -2L, -1L, -2L, -2L,
                      -2L, -2L, -2L, -2L, -2L, -2L, -3L, -3L, -3L, -3L, -3L, -3L,
                      -3L, -3L, -4L, -4L, -3L, -4L, -4L, -4L, -4L, -4L, -4L, -3L,
                      -3L, -2L, 0L, 1L, 2L, 3L, 4L, 6L, 6L, 8L, 9L, 9L, 10L, 11L,
                      12L, 12L, 12L, 12L, 13L, 13L, 13L, 13L, 12L, 10L, 9L, 8L,
                      6L, 5L, 5L, 4L, 4L, 3L, 3L, 2L, 2L, 2L, 2L, 0L, 1L, 0L, 0L,
                      0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, -1L, -1L, -1L, -2L, -2L,
                      -1L, -2L, -2L, -2L, -2L, -2L, -2L, -2L, -2L, -3L, -3L, -3L,
                      -3L, -3L, -3L, -3L, -3L, -2L, -2L, 0L, 0L, 1L, 3L, 4L, 5L,
                      6L, 7L, 8L, 9L, 10L, 10L, 12L, 13L, 13L, 13L, 13L, 14L, 14L,
                      14L))

И мне нужно получить другие столбцы, такие как средняя температура, минимум, максимум и средняя точка росы, максимум и минимум каждый день. У меня много результатов за день, потому что это ежечасно. Я пробовал много способов, но получаю неверный результат.

Сначала я попытался понять это с помощью этого кода:

tapply (Dados$TEMP_Celcius, Dados$Dates, mean) Но я получаю неверный результат. Например, для даты 01.01.2014 я получаю 27,8, и правильный результат будет 1,97.

Я пробовал либо коды:

tapply(Dados$TEMP_Celcius, Dados$Dates, mean, na.rm = TRUE)

aggregate(Dados$TEMP_Celcius, by=list(TMEDIA=Dados$Dates), mean)

Но я получил те же результаты. Я не знаю, что делаю не так, не могли бы вы мне помочь?

Я уже проверил класс столбца Даты, это «Дата» и переменная температура, и это «числовой».


person Ana Paula Franzoni    schedule 17.03.2019    source источник
comment
Добро пожаловать, всем будет легче ответить на вопрос, если вы приведете воспроизводимый пример.   -  person william3031    schedule 18.03.2019
comment
Кроме того, ваш пример изображения не загружается, но вы все равно должны предоставить код вместо изображения.   -  person william3031    schedule 18.03.2019
comment
Конечно. Как я могу это сделать?   -  person Ana Paula Franzoni    schedule 18.03.2019
comment
Я попытался вставить сюда таблицу, но она отображается неправильно   -  person Ana Paula Franzoni    schedule 18.03.2019
comment
Используйте 1_. См. Здесь: stackoverflow .com / questions / 5963269 /   -  person william3031    schedule 18.03.2019
comment
Вы также можете просто вставить образец своих данных вместо целого. Достаточно ровно для того, чтобы мы могли решить, какие столбцы нужны для того, чтобы делать то, что вы хотите.   -  person william3031    schedule 18.03.2019
comment
Я попытался вставить первую дату data.frame. Посмотрите, сработает ли это, пожалуйста? Когда я его пропускаю, кажется, что конфигурация меняется. Хочу прикрепить файл с образцом фрейма данных. Является ли это возможным?   -  person Ana Paula Franzoni    schedule 18.03.2019
comment
То, как вы его вставили, бесполезно. Можете ли вы использовать dput() или dump(), как описано здесь: stackoverflow.com/questions/5963269/   -  person william3031    schedule 18.03.2019
comment
Прошу прощения, но я не понял, как использовать dput () или dump (). Я все еще пытаюсь.   -  person Ana Paula Franzoni    schedule 18.03.2019
comment
СМОТРИТЕ это: a <- dput(Dados) b <- structure(list .... #copy everything   -  person william3031    schedule 18.03.2019
comment
Как это? Спасибо за терпеливость.   -  person Ana Paula Franzoni    schedule 18.03.2019
comment
Суть запросов на использование dput заключается в том, что это даст другим людям возможность точно воссоздать образец ваших данных, форматов и всего остального. Если ваш фрейм данных называется Dados и вы хотите поделиться первыми 100 строками, вы должны ввести dput(head(Dados, 100)) в консоль, а затем вставить его вывод в свой вопрос.   -  person Jon Spring    schedule 18.03.2019
comment
Я положил тебе немного dput.   -  person william3031    schedule 18.03.2019
comment
Текущий вопрос - это не рабочий код. Я ожидал, что фактический результат dput будет выглядеть существенно иначе - например, все символьные поля будут заключены в кавычки.   -  person Jon Spring    schedule 18.03.2019
comment
Теперь я понимаю dput ()! Спасибо, Джон Спринг и wl1234 за помощь. Я облегчу следующие вопросы.   -  person Ana Paula Franzoni    schedule 19.03.2019


Ответы (1)


На самом деле, не видя, какие данные у вас есть, возможно, вы могли бы попробовать это? Он использует tidyverse (который вам следует изучить, так как он все упростит).

library(tidyverse)
Dados %>% 
  group_by(Dates) %>% 
  summarise(mean = mean(TEMP_Celcius), min = min(TEMP_Celcius), max = max(TEMP_Celcius))

Это дало мне такой результат:

# A tibble: 2 x 4
  Dates      mean   min   max
  <chr>     <dbl> <dbl> <dbl>
1 1/01/2014  1.97    -4    13
2 2/01/2014  2.75    -3    14

Обновлено после предложения @Jon Spring:

library(tidyverse)
Dados %>% 
  group_by(Identification, Dates) %>% 
  summarise(mean = mean(TEMP_Celcius), min = min(TEMP_Celcius), max = max(TEMP_Celcius))

Выход:

# A tibble: 2 x 5
# Groups:   Identification [?]
  Identification                Dates      mean   min   max
  <chr>                         <chr>     <dbl> <dbl> <dbl>
1 LONNIE POOL FIELD WEAVERVILLE 1/01/2014  1.97    -4    13
2 LONNIE POOL FIELD WEAVERVILLE 2/01/2014  2.75    -3    14
person william3031    schedule 17.03.2019
comment
Есть ли в ваших данных несколько местоположений? Если это так, вы должны group_by(Identification, Dates) %>% в приведенном выше коде, иначе вы будете получать среднее значение для всех местоположений за каждый день. - person Jon Spring; 18.03.2019
comment
У меня работает, смотрите результаты выше. (Извините, случайно удалил комментарий). - person william3031; 18.03.2019