首页 > 解决方案 > 使用 as.character(as.Date()) 转换原始因子变量 Date 列后按特定日期对数据框进行子集

问题描述

我对 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。

这个线程中,我发现建议首先运行 as.Date 函数(如果需要,还可以运行 as.character 函数),然后运行一个子集函数。

因此,首先,我使用 as.character(rawdata$Date) 将“日期”列从因子转换为字符。意识到这会生成一个完整的数据列表,我将它分配给对象 CharDate,如下所示:

CharDate <- as.character(rawdata$Date)

然后,我使用 as.Date 再次转换数据,打算用它来子集我的 rawdata,将其分配给 DateasDate。

DateasDate <- as.Date(CharDate, "%d/%m/%y")

在这一点上,我很困惑如何使用它来对我的原始文件进行子集化rawdata,因为这不是DateasDate一个新变量吗?我必须添加DateasDate为一列rawdata吗?有什么方法可以rawdata直接更改 Date 列,这样我就不必这样做了?

任何帮助将非常感激!!

标签: rdataframesubsetas.date

解决方案


您可以先将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"))

推荐阅读