Я очень новичок в R и пытаюсь решить некоторые практические задачи. У меня есть большой набор данных, из которого мне нужно создать меньший набор данных по диапазону дат. У меня возникают трудности с этим, и, вероятно, это потому, что я плохо понимаю, что делают эти R-команды.
Вот первые шесть строк набора данных rawdata:
Date Time Global_active_power Global_reactive_power Voltage
1 16/12/2006 17:24:00 4.216 0.418 234.840
2 16/12/2006 17:25:00 5.360 0.436 233.630
3 16/12/2006 17:26:00 5.374 0.498 233.290
4 16/12/2006 17:27:00 5.388 0.502 233.740
5 16/12/2006 17:28:00 3.666 0.528 235.680
6 16/12/2006 17:29:00 3.520 0.522 235.020
Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3
1 18.400 0.000 1.000 17
2 23.000 0.000 1.000 16
3 23.000 0.000 2.000 17
4 23.000 0.000 1.000 17
5 15.800 0.000 1.000 17
6 15.000 0.000 2.000 17
Я хотел бы создать подмножество этих данных, где даты проходят с 01.02.2007 по 02.02.2007.
Из эта тема я нашел предложение сначала запустить функцию as.Date (и, если необходимо, функцию as.character), а затем функцию подмножества.
Итак, для начала я преобразовал столбец «Дата» из факторов в символы, используя as.character(rawdata$Date). Понимая, что это сгенерировало целый список данных, я присвоил его объекту CharDate следующим образом:
CharDate <- as.character(rawdata$Date)
Затем я снова преобразовал данные, используя as.Date, намереваясь использовать это для подмножества необработанных данных, назначив их DateasDate.
DateasDate <- as.Date(CharDate, "%d/%m/%y")
На данный момент я не понимаю, как использовать это для подмножества моего исходного файла rawdata, поскольку DateasDate не является новой переменной? Должен ли я добавить DateasDate в качестве столбца к rawdata? Есть ли способ внести изменения в столбец «Дата» в rawdata напрямую, чтобы мне не пришлось этого делать?
Любая помощь приветствуется!!





Вы можете сначала преобразовать объект Date в фактическую дату, а затем subset фрейм данных.
df$Date <- as.Date(df$Date, "%d/%m/%Y")
subset(df, Date >= as.Date("2007-01-02") & Date <= as.Date("2007-02-02"))
Или используя ту же логику с dplyr
library(dplyr)
df %>%
mutate(Date = as.Date(Date, "%d/%m/%Y") %>%
filter(Date >= as.Date("2007-01-02") & Date <= as.Date("2007-02-02"))
Спасибо за ваши предложения! Я никогда не знал, что можно изменять переменные, назначая им функции таким образом, это действительно полезно! Первая строка df$Date <- as.Date(df$Date, "%d/"%m/%y") работала прекрасно, однако функция подмножества не работала, создавая сообщение об ошибке, которое гласит: «Ошибка в charToDate(x): строка символов не имеет стандартного однозначного формата».
@abbylim вы неправильно скопировали первую строку. Можешь сделать df$Date <- as.Date(df$Date, "%d/%m/%Y") и потом проверить. Обратите особое внимание на "%d/%m/%Y".
Ах! После исправления этого сообщения об ошибке больше нет, но подмножество оказалось пустым фреймом данных с 0 строками? То же самое произошло, когда я попытался сделать subset(rawdata, Date == as.Date("2007-02-01") | Date == as.Date("2007-02-02")).
странно .. можете ли вы сказать мне, какой результат вы получаете, когда делаете 1) class(rawdata$Date), 2) min(rawdata$Date) и 3) max(rawdata$Date)?
Мне очень жаль, что я понял, что это произошло потому, что я набрал «2002-02-02» вместо «2002-2-2»...... Большое спасибо за ваше терпение и помощь!!!
@RonakShah очень сожалею об этом, я отредактировал это, и, надеюсь, это имеет больше смысла!