使用 as.character(as.Date()) 转换原始因子变量日期列后,按特定日期对数据框进行子集化
Subsetting a data frame by specific dates after using as.character(as.Date()) to convert original factor variable Date column
我是 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
我想创建此数据的一个子集,其中日期 运行 从 02/01/2007 - 02/02/2007。
从 this thread,我发现建议首先 运行 as.Date 函数(如果需要,还有 as.character 函数),然后是子集函数。
因此,首先,我使用 as.character(rawdata$Date) 将 "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"))
我是 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
我想创建此数据的一个子集,其中日期 运行 从 02/01/2007 - 02/02/2007。
从 this thread,我发现建议首先 运行 as.Date 函数(如果需要,还有 as.character 函数),然后是子集函数。
因此,首先,我使用 as.character(rawdata$Date) 将 "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"))