[英]How to add New Column from another Dataframe in R corresponding to the particular samples in First Data frame
[英]How to find the longest occurrence of a string in a column and corresponding first and last values from another column in a data frame in R?
df <- data.frame(Vehid = rep(c(1,2,3), each=15), gap = c(rep(5,3), rep(7,2), 20,20,21,21,22,23,24,28,29,30, 20,20,21,21,22,23,24,28,29,30, rep(7,5), rep(5,3), rep(7,3), rep(5,3), 7, 20,24,26,28,30),
State = c(rep('Following',3), rep('.',2), rep('Following',10), rep('Following',10), rep('.',5), rep('Following',3), rep('.',3), rep('Following',3), '.', rep('Following',5)))
Vehid
是车辆的唯一ID, gap
是车辆与另一车辆保持的距离, State
Vehid
车辆是否在“跟随”(交通工程中的技术术语)另一车辆。 您可以看到在此示例df
,一辆车辆可能有多个连续发生“跟随”事件的实例。 的.
表示“不关注”。 我想为每个Vehid
查找Vehid
的“跟随”状态,并找到该gap
的第一个和最后一个值。
df2 <- data.frame(Vehid = rep(c(1,2,3), each=15), gap = c(rep(5,3), rep(7,2), 20,20,21,21,22,23,24,28,29,30, 20,20,21,21,22,23,24,28,29,30, rep(7,5), rep(5,3), rep(7,3), rep(5,3), 7, 20,24,26,28,30),
State = c(rep('Following',3), rep('.',2), rep('Following',10), rep('Following',10), rep('.',5), rep('Following',3), rep('.',3), rep('Following',3), '.', rep('Following',5)),
dx_safe = rep(20,45), dx_CC2 = rep(30,45))
dx_safe
是出现时间最长的第一个Following
字符串的gap
,而dx_CC2
是最后出现的dx_CC2
。
我什么都不知道! 请帮忙。
为了获得最长的运行时间,我几乎会使用rle
函数。 我还将照顾通过split
的Vehicle ID split
数据,然后与do.call(rbind())
。 我结束了
dx<-do.call(rbind, (lapply(split(df,df$Vehid), function(x){
rr <- rle(x$State=="Following")
i <- which.max(rr$lengths * rr$values)
v <- x$gap[c((s<-sum(c(0,rr$lengths)[1:i]))+1, s+rr$lengths[i])]
data.frame(Vehid=x$Vehid[1], dx_safe=v[1], dx_CC2=v[2])
})))
哪个返回
Vehid dx_safe dx_CC2
1 1 20 30
2 2 20 30
3 3 20 30
然后,要重新加入原始数据,可以进行简单的合并。
merge(df, dx)
它应该看起来像您想要的输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.