合并不同的行

时间:2014-07-16 16:42:23

标签: r

考虑表格

的数据框
                 id       start        end
2009.36220 65693384  2010-03-20 2010-07-04
2010.36221 65693592  2010-01-01 2010-12-31
2010.36222 65698250  2010-01-01 2010-12-31
2010.36223 65704349  2010-01-01 2010-12-31

我每年对 20k 的观察进行了15年的观察。

我需要按以下规则组合行:

  • 如果是同一id,则存在一年中最后一天结束的记录
  • 以及从第二年第一天开始的记录

然后 - 创建一个新行,其前一行的start值和后一年的end值 - 并删除两个原始行

鉴于可以多次看到相同的id(因为我有超过2年),我将在几次迭代脚本以组合连续几年中具有例如4行的不同ID满足条件。

问题

我知道如何以迭代的方式对此进行编程,我将遍历每一行并检查明年是否有一个开始日期的行在整个数据框中的某个地方对应于今年的结束日期 - 但从美学的角度来看,这是非常缓慢和不令人满意的。我是R的初学者,所以我不知道哪里能以更有效的方式做这样的事情 - 我可以提出任何建议。

1 个答案:

答案 0 :(得分:0)

警告:这种带rbind()的代码是癌症,但这是我能想到的最简单的解决方案。让df成为您的数据。

df$start = as.POSIXct(df$start)
df$end = as.POSIXct(df$end)
df2 = data.frame()
for (i in unique(df$id)){
  s = subset(df, id==i)
  df2 = rbind(df2, c(id, min(s$start), max(s$end)))
}