#r #dataset #lubridate #data-wrangling
#r #набор данных #lubridate #обработка данных
Вопрос:
Я готовлю набор данных для дальнейшего анализа. Для этого я делаю сдвиг во времени — дни (60) и записываю результат в новый столбец. Обычно это не сложно, но компьютер не выполняет это полностью. Несколько строк, которые не вычисляются.
df$acquisition_time=as.POSIXct(df$acquisition_time, format = "%Y-%m-%d %H:%M:%OS")
df$acqui_timeshift <- df$acquisition_time - days(60)
Здесь я поместил скриншот, на котором вы видите проблему:
«NA» в углу продолжается дальше. Набор данных составляет 1,3 миллиона строк. Так что, может быть, мощности компьютера недостаточно? ОШИБКА отсутствует: или ПРЕДУПРЕЖДЕНИЕ: от R
было бы неплохо, если бы кто-нибудь мог помочь мне с этой странной проблемой!
Большое спасибо!
Лучше всего, Кристиан
data<- structure(list(ani_id_year = c("982_year2019", "982_year2019",
"985_yearNA", "996_yearNA"), month = c("02", "02", "05", "05"
), year = c(2020, 2020, 2018, 2018), year_ts = c(2019, 2019,
NA, NA), acquisition_time = structure(c(1581310879, 1581782462,
1527120030, 1527120052), class = c("POSIXct", "POSIXt"), tzone = ""),
day = c("02-10", "02-15", "05-24", "05-24"), x = c(382992.722829081,
384653.805434133, 387585.792076463, 388305.553482353), y = c(5419798.49669287,
5420068.44700148, 5411757.45423474, 5401584.90172328), groupid = c(3L,
3L, 3L, 2L), name = c(982L, 982L, 985L, 996L), name_echte = c("Tana",
"Tana", "Zita", "Berta"), nr = c(1351995L, 1352125L,
1370437L, 1278038L)), row.names = c(1256187L, 1256317L, 1281322L,
1343545L), class = "data.frame")
извините, я действительно не знаю, как добавить это сюда, я использовал dpud() для получения кода..
Комментарии:
1. Можете ли вы добавить воспроизводимый пример? Вы не связали данные, поэтому мы можем только догадываться, что происходит не так.
2. Похоже, вы используете
View()
для просмотра своих данных. В больших наборах данных могут возникать проблемы / задержки при отображении материала при прокрутке вниз. Чтобы проверить, действительно ли в нем много пропусковacqui_timeshift
, используйтеsum(is.na(df$acqui_timeshift))
.3. @PLY Я сделал все возможное, я не могу привести таблицу в порядок, есть ли простой инструмент для этого? @benimwolfspelz да, я пробовал это, и есть NAs, также, пока я продолжаю работать с таблицей «df $ aquitimeshift«? …
Ответ №1:
Я не смог воспроизвести ту же ошибку, используя то, что было предоставлено. Но я могу подтвердить, что способ, которым вы вычисляете acqui_timeshift
, работает. (Если вы отфильтруете входные данные только до тех наблюдений, которые приводят к acqui_timeshift
is NA
, и предоставите эти отфильтрованные данные в качестве воспроизводимого примера, я могу повторить попытку здесь.)
Использование data
предоставленного в настоящее время
# Method 1 - Using lubridate days() ----------------------------------------
df$acquisition_time <- as.POSIXct(df$acquisition_time, format = "%Y-%m-%d %H:%M:%OS")
df$acqui_timeshift <- df$acquisition_time - days(60)
# ani_id_year acquisition_time acqui_timeshift
# 1256187 982_year2019 2020-02-10 05:01:19 2019-12-12 05:01:19
# 1256317 982_year2019 2020-02-15 16:01:02 2019-12-17 16:01:02
# 1281322 985_yearNA 2018-05-24 00:00:30 2018-03-25 00:00:30
# 1343545 996_yearNA 2018-05-24 00:00:52 2018-03-25 00:00:52
# Method 2 - Using base R difftime() ----------------------------------------
df$acquisition_time = as.POSIXct(df$acquisition_time, format = "%Y-%m-%d %H:%M:%OS")
df$acqui_timeshift <- df$acquisition_time - as.difftime(60, unit="days")
# ani_id_year acquisition_time acqui_timeshift
# 1256187 982_year2019 2020-02-10 05:01:19 2019-12-12 05:01:19
# 1256317 982_year2019 2020-02-15 16:01:02 2019-12-17 16:01:02
# 1281322 985_yearNA 2018-05-24 00:00:30 2018-03-25 00:00:30
# 1343545 996_yearNA 2018-05-24 00:00:52 2018-03-25 00:00:52
Выделение того aquisition_time
, что было создано NA
на вашем скриншоте
# Method 1 - Using lubridate days() ----------------------------------------
as.POSIXct("2019-05-30 02:00:38", tz = "UTC", format = "%Y-%m-%d %H:%M:%OS") - days(60)
# "2019-03-31 02:00:38 UTC"
# Method 2 - Using base R difftime() ----------------------------------------
as.POSIXct("2019-05-30 02:00:38", tz = "UTC", format = "%Y-%m-%d %H:%M:%OS") - as.difftime(60, unit="days")
# "2019-03-31 02:00:38 UTC"