假设我们有一个数据框(第三列是日期列),其中包含从2000年1月到2011年10月开始的不规则事件的观察。目标是选择包含两个日期之间观察的数据框的那些行< / p>
start<-"2005/09/30"
end<-"2011/01/31"
原始数据框包含大约21 000行。我们可以使用验证
length(df_original$date_column)
。
我们现在创建一个新数据框,其中包含比开始日期更新的日期:
df_new<-df_original[df_original$date_column>start,]
如果我使用length(df_new$date_column)
检查长度,则显示长度为13 000。
现在我们使用第二个标准(小于结束日期)创建另一个数据框:
df_new2<-df_new[df_new$date_column<end,]
如果我再次使用length(df_new2$date_column)
检查长度,则显示长度约为19 000个。
如何通过在新数据框df_new
上应用第二个标准来增加行数? df_new
应该有等于或低于13 000的行数。
数据框非常大,我不能在这里发布。也许某人可以提供出现这种情况的原因。
答案 0 :(得分:2)
以下示例适用于我:
df_original = data.frame(date_column = seq(as.Date('2000/01/01'), Sys.Date(), by=1), value = 1)
start = as.Date('2005/09/30')
end = as.Date('2011/01/31')
df_new = df_original[df_original$date_column>start,]
df_new2 = df_new[df_new$date_column<end,]
> dim(df_original)
[1] 4316 2
> dim(df_new)
[1] 2216 2
> dim(df_new2)
[1] 1948 2
如果没有看到您的实际数据示例,我建议您注意以下两点:
答案 1 :(得分:1)
您可以通过一个子集命令获得所需的结果吗?
df_new <- df_original[with(df_original, date_column>start & date_column<end),]
# or
df_new <- subset(df_original, date_column>start & date_column<end)
答案 2 :(得分:1)
dput(head(df_original))
吗?它与我们分享了前5条记录及其数据结构。我怀疑你date_column
的格式是什么。
如果您将start
和end
存储为字符串(您的示例似乎表明)并且日期列也是字符串,那么您将无法使用{{1} }或<
来比较日期的值。因此,您需要验证所比较的所有内容都被R称为日期。