【发布时间】:2016-11-25 01:56:40
【问题描述】:
data <- read.table(text=
"ID1 ID2 From To
12 127 20090701 20090703
12 127 20090704 20090711
12 127 20090707 20100831
12 127 20100901 99991231
18 880 19740401 20091129
18 880 20100608 99991231
12 127 20080102 20080305
12 127 20080306 20080329
12 128 20080620 20090204"
, header=T)
我想把上面的数据框转换成如下形式:
result <- read.table(text=
"ID1 ID2 From To
12 127 20080102 20080329
12 127 20090701 99991231
12 128 20080620 20090204
18 880 19740401 20091129
18 880 20100608 99991231"
, header=T)
几句话的转换是按 ID1、ID2 和主题持续活跃的唯一时间段(不是一天休息)进行分组。这是在不需要的情况下删除多行(从日期 1 到日期 2 的一个连续活动期)。
感谢指出解决方案。
对于初学者,请转换日期:
df$From <- as.Date(as.character(df$From), format = "%Y%m%d")
df$To <- as.Date(as.character(df$To), format = "%Y%m%d")
【问题讨论】:
-
首先,您应该将
From和To列转换为:df$From <- as.Date(as.character(df$From), format = "%Y%m%d")这使您可以检查两天是否连续。 -
当然,字符串需要转换为日期,thanx 指出这一点。我正在考虑一个 dplyr 解决方案,例如 df %>% group_by(ID1, ID2) %>% mutate(function1 to get the from date) %>% mutate(function2 to get the to date)...函数可能在哪里我猜一个 for i 循环或类似的东西
-
听起来是一种明智的做法。祝你好运!
-
99992131的日期是什么? -
抱歉,它应该是 99991231(已编辑),表示 9999 年 12 月 31 日。它是一个遥远的未来,以表示无限的生命周期
标签: r date aggregation