繁体   English   中英

根据多个条件从另一个data.frame添加列

[英]Add column from another data.frame based on multiple criteria

我有2个数据框:

cars = data.frame(car_id=c(1,2,2,3,4,5,5), 
                  max_speed=c(150,180,185, 200, 210, 230,235),
                  since=c('2000-01-01', '2000-01-01', '2007-10-01', '2000-01-01', '2000-01-01', '2000-01-01', '2009-11-18'))

voyages = data.frame(voy_id=c(1234,1235,1236,1237,1238),
                     car_id=c(1,2,3,4,5), 
                     date=c('2000-01-01', '2002-02-02', '2003-03-03', '2004-04-04', '2010-05-05'))

如果仔细观察,您会发现这些汽车偶尔会有一个car_id条目,因为制造商决定提高该品牌的最大速度。 每个条目都有一个标有的日期, 因为它表示应用实际最大速度的日期。

我的目标:我想基于cars找到的值将max_speed变量添加到voyages数据框中。 我不能加入由2个数据帧car_id因为我也有检查datevoyages和比较, 因为cars ,以确定正确的max_speed

问题:没有循环的优雅方法是什么?

一种方法:

合并两个数据集,包括“汽车”中的重复观测值。 删除“自”日期晚于“日期”日期的所有观察值。 对数据集进行排序,以使最新日期排在第一位,然后删除对“ voy_id”的重复观测值-这可确保“自”以来有两个日期,您仅保留发生在航行日期之前的最新日期。

z <- merge(cars, voyages, by="car_id")
z <- z[as.Date(z$since)<=as.Date(z$date),]
z <- z[order(as.Date(z$since), decreasing=TRUE),]
z <- z[!duplicated(z$voy_id),]

也很想知道是否有人想出一种更优雅,更简约的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM