#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"))