如何在不同数据帧中基于时间间隔插入“事件虚拟”(?)

动物园漫步

我有一个数据框,其中提供了不同国家/地区的活动开始和结束日期。每个国家(例如,国家A)的事件可能会发生多次。

Start.Year <- c("1990","1992","1997","1995")
End.Year <- c("1995","1993","2000","1996")
Country <- c("A","B","A","C")
a <- data.frame(Start.Year,End.Year,Country)
a$Start.Year <- as.numeric(as.character(a$Start.Year))
a$End.Year <- as.numeric(as.character(a$End.Year))

      Start.Year End.Year Country
       1990     1995       A
       1992     1993       B
       1997     2000       A
       1995     1996       C 

我有第二个数据帧,该数据帧的时间序列横截面格式为(年/国家/事件(是/否)。

b1 <-as.data.frame(expand.grid(year=(1990:2000), Country=unique(a$Country)))
b1$Event <-0   
b1$year <- as.numeric(as.character(b1$year))

如何获得以下结果(对于笨拙的演示文稿,我们深表歉意)。当年份介于第一个数据框的开始和结束年之间时,事件应为“ 1”;否则,事件应为“ 1”。对于每个国家 第二个数据帧已经存在,这意味着我不想转换第一个数据帧,而是将信息从第一个数据帧匹配到第二个数据帧。

我试过了

b1$Event[a$Start.Year<=b1$year & a$End.Year>=b1$year] <- 1 

但出现“较长的对象长度不是较短的对象长度的倍数”作为错误消息。感谢您的任何提示/建议!

结果旨在:

  Year Country Event
  1990       A     1
  1991       A     1
  1992       A     1
  1993       A     1
  1994       A     1
  1995       A     1
  1996       A     0
  1997       A     1
  1998       A     1
  1999       A     1
  2000       A     1
  1990       B     0
  1991       B     0
  1992       B     1
  1993       B     1
  1994       B     0
  1995       B     0
  1996       B     0
  1997       B     0
  1998       B     0
  1999       B     0
  2000       B     0
  1990       C     0
  1991       C     0
  1992       C     0
  1993       C     0
  1994       C     0
  1995       C     1
  1996       C     1
  1997       C     0
  1998       C     0
  1999       C     0
  2000       C     0
伊利里亚人

这是使用中的滚动联接功能的解决方案data.table我对您的定义进行了少许更改(固定?),a并删除了中的Eventb1

require(data.table)

Start.Year <- c(1990, 1992, 1997, 1995)
End.Year <- c(1995, 1993, 2000, 1996)
Country <- c("A", "B", "A", "C")
a <- data.frame(Start.Year, End.Year, Country)
a <- data.table(a)   ## convert to use feature

b1 <-as.data.frame(expand.grid(year=(1990:2000), Country=unique(a$Country)))
b1 <- data.table(b1)  ## convert 

##  join by Start.Year, setting matching keys for each dataset
setkey(a, Country, Start.Year)
setkey(b1, Country, year)

# the tricky part
# roll=TRUE means all years will match to 
# next smallest event Start.Year
ab <- a[b1, roll=TRUE] 

setnames(ab, c('Country', 'Year', 'Event'))  ## fix names
ab[Year > Event, Event:=NA]  ## stop index at end year
ab[!is.na(Event), Event:=1]  ## transform year markers to 1
ab[is.na(Event), Event:=0]   ## transform missing matches to 0

ab是所需格式的数据。您可以像使用a一样使用它,也可以将其data.frame转换回该类中。加入应该非常快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在处理中的不同时间间隔后触发不同的事件?

基于时间戳间隔重叠的数据帧

如何基于时间间隔将时间索引Dask数据帧输出到CSV

如何基于另一个数据帧中的时间间隔在一个数据帧中添加新列

如何计算在数据帧的不同行中拆分的事件的持续时间

如何基于R中的时间间隔对数据进行分组

如何在 JMeter 中插入请求之间的时间间隔?

如何在R中基于时间分配数据帧的组

如何基于时间间隔合并两个数据帧并进行转换

如何基于两个时间间隔之间的日期合并数据帧?

如何在openCV中基于时间戳选择特定帧?

如何在大型数据帧中快速转换不同的时间格式?

合并不同时间间隔的Pandas数据帧时,如何用常数填充NaN

如何在R中解聚合时间间隔数据?

如何在不同的时间间隔设置值?

如何在python中的MySQL表中插入数据帧?

如何在R中基于列的数据帧相交

如何在 R(交叉引用数据帧)中执行基于标记的数据帧校正?

如何按定义的时间间隔对熊猫数据帧进行分组?

按等距的时间间隔聚合R中的数据帧

创建数据帧中不存在的时间间隔

向数据帧中的列添加时间间隔

按 R 中的时间间隔合并数据帧

计算熊猫数据帧中时间间隔内的行数

SQL查询以获取不同事件中的时间间隔

如何在Android中基于时间间隔启动服务和停止服务

如何在fullcalendar事件中插入自定义数据?

Flutter中如何在Stream.periodic事件中使用动态间隔时间

如何在使用* args的函数中基于年份在基于数据帧的基础上删除行