R数据帧 - 行数增加

时间:2011-10-25 18:14:43

标签: r dataframe

假设我们有一个数据框(第三列是日期列),其中包含从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的行数。

数据框非常大,我不能在这里发布。也许某人可以提供出现这种情况的原因。

3 个答案:

答案 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. 确保您的日期被编码为日期。
  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的格式是什么。

如果您将startend存储为字符串(您的示例似乎表明)并且日期列也是字符串,那么您将无法使用{{1} }或<来比较日期的值。因此,您需要验证所比较的所有内容都被R称为日期。