Как заменить числа датами или удалить строки с числами из фрейма данных?

#r

#r

Вопрос:

У меня есть такой фрейм данных:

 [701] "38760" "38788" "38819" "38849" "38880" "38910" "38941"  [708] "38972" "39002" "39033" "39063" "12/13/2006" "12/14/2006" "12/15/2006" [715] "12/16/2006" "12/17/2006" "12/18/2006" "12/19/2006" "12/20/2006" "12/21/2006" "12/22/2006" [722] "12/23/2006" "12/24/2006" "12/25/2006" "12/26/2006" "12/27/2006" "12/28/2006" "12/29/2006" [729] "12/30/2006" "12/31/2006"  

и я хотел бы иметь только даты (заменяя или удаляя цифры). Кто-нибудь знает какой-нибудь разумный быстрый способ сделать это?

Комментарии:

1. Когда вы говорите «заменить числа», можете ли вы показать ожидаемый результат

2. В моем файле xls у меня есть только даты. Когда я загружаю этот файл в R, у меня получается что-то подобное, и я не знаю, почему. Я не знаю, какими датами его заменить. Поэтому я думаю, что просто удалю его. Ты знаешь, как это сделать? Удалите строки с цифрами.

3. например, «38760» может быть проанализировано, т. Е. library(parsedate); parse_date("38760") [1] "2021-12-06 12:39:25 UTC" Я просто хотел знать, что вы ожидаете в качестве даты, хотя

4. т. е. если вы сделаете parse_date(dates) это в столбце «даты», это должно работать для всех этих форматов

5. Я хотел даты только с 2005 и 2006 годов, я попробую ваш путь

Ответ №1:

Предполагая, что у нас есть столбец «даты», в data.frame который входят только два формата — 1) %m/%d/%Y и 2) числовые значения, — затем мы применяем as.Date этот формат %m/%d/%Y ко всем «датам». Если значения числовые, он вернется NA , что мы делаем отдельно и обновляем в base R

 dates1 lt;- with(df1, as.Date(dates, format = "%m/%d/%Y")) dates1[is.na(dates1)] lt;- with(df1, as.Date(as.integer(dates[is.na(dates1)]),   origin = "1899-12-30")) df1$dates lt;- dates1  

-выход

 gt; df1$dates  [1] "2006-02-12" "2006-03-12" "2006-04-12" "2006-05-12" "2006-06-12" "2006-07-12" "2006-08-12" "2006-09-12" "2006-10-12" "2006-11-12" "2006-12-12" "2006-12-13" [13] "2006-12-14" "2006-12-15" "2006-12-16" "2006-12-17" "2006-12-18" "2006-12-19" "2006-12-20" "2006-12-21" "2006-12-22" "2006-12-23" "2006-12-24" "2006-12-25" [25] "2006-12-26" "2006-12-27" "2006-12-28" "2006-12-29" "2006-12-30" "2006-12-31"  

данные

 df1 lt;- structure(list(dates = c("38760", "38788", "38819", "38849",  "38880", "38910", "38941", "38972", "39002", "39033", "39063",  "12/13/2006", "12/14/2006", "12/15/2006", "12/16/2006", "12/17/2006",  "12/18/2006", "12/19/2006", "12/20/2006", "12/21/2006", "12/22/2006",  "12/23/2006", "12/24/2006", "12/25/2006", "12/26/2006", "12/27/2006",  "12/28/2006", "12/29/2006", "12/30/2006", "12/31/2006")),  class = "data.frame", row.names = c(NA,  -30L))  

Комментарии:

1. Большое спасибо. Работай так, как я хотел! 🙂

Ответ №2:

Я предполагаю, что это Excel свидание. Итак, теперь вы можете использовать origin аргумент, о as.Date котором 30 декабря 1899 года.

 library(dplyr) df %gt;%   mutate(date = as.Date(date, origin = "1899-12-30"))  
 date Przedmiescie Centrum 1 2005-01-01 0 0 2 2005-02-01 0 0 3 2005-03-01 0 0 4 2005-04-01 0 0 5 2005-05-01 0 2 6 2005-06-01 0 0  

данные:

 structure(list(date = c(38353L, 38384L, 38412L, 38443L, 38473L,  38504L), Przedmiescie = c(0L, 0L, 0L, 0L, 0L, 0L), Centrum = c(0L,  0L, 0L, 0L, 2L, 0L)), class = "data.frame", row.names = c("1",  "2", "3", "4", "5", "6"))