在对数据帧进行子集时,为什么在R中使日期相等无效

时间:2015-03-07 22:02:21

标签: r

这是一个简单的数据

Date;Time;Global_active_power;Global_reactive_power;Voltage;Global_intensity;Sub_metering_1;Sub_metering_2;Sub_metering_3
16/12/2006;17:24:00;4.216;0.418;234.840;18.400;0.000;1.000;17.000
16/12/2007;17:25:00;5.360;0.436;233.630;23.000;0.000;1.000;16.000
16/12/2008;17:26:00;5.374;0.498;233.290;23.000;0.000;2.000;17.000

我写了以下代码

data <- read.table("foo.txt", sep=";", header=T, stringsAsFactors=F)
data$Date <- as.Date(data$Date, "%d/%m/%Y")
subset(data, Date=as.Date("2006-12-16"))

但输出全部是3行而不是1

好奇。大于号但不起作用=

subset(data, Date>as.Date("2006-12-16"))

按预期返回2行。

一些谷歌搜索显示这是有效的

subset(data, Date %in% as.Date("2006-02-01"))

但为什么不=

1 个答案:

答案 0 :(得分:1)

如果我们查看?subset

 ## S3 method for class 'data.frame'
 subset(x, subset, select, drop = FALSE, ...)
  

subset:表示要保留的元素或行的逻辑表达式:             缺失值视为错误。

=是名称的assigning值,而==运算符允许比较值并返回逻辑表达式

所以,

subset(data, Date == as.Date("2006-02-01")) 

%in%一样有效。如果有多个日期值,我会使用%in%,因为==会更快。