【发布时间】:2013-01-30 16:08:32
【问题描述】:
由于缺少更好的词,如何将“补丁”应用于 R data.frame?假设我有一个包含公司和出口列的主数据库,以及在本例中为 1 或 0 的所有权份额变量,但可以是任何百分比。
// master
firm outlet shares.pre
1 five 1 0
2 one 1 1
3 red 1 0
4 yellow 1 0
5 five 2 0
6 one 2 0
// many more
我想让公司“one”将出口“1”卖给公司“red”,我在另一个data.frame中进行了哪些交易
// delta
firm outlet shares.delta
1 one 1 -1
2 red 1 1
在 R 中将此“补丁”或事务应用于我的主数据库的最有效方法是什么?最终结果应如下所示:
// preferably master, NOT a copy
firm outlet shares.post
1 five 1 0
2 one 1 0 <--- was 1
3 red 1 1 <--- was 0
4 yellow 1 0
5 five 2 0
6 one 2 0
// many more
我并不特别喜欢保留后缀pre、post 或delta。如果它们都被命名为 shares 也可以,我只是想“添加”这些数据帧。
更新:我目前的做法是这样的
update <- (master$firm %in% delta$firm) & (master$outlet %in% delta$outlet)
master[update,]$shares <- master[update,]$shares + delta$shares
是的,我知道它会进行向量扫描以创建布尔 update 向量,并且子集也不是很有效。但我最不喜欢的是我必须写出匹配的列。
【问题讨论】:
-
在速度或代码长度方面效率高?
-
@AriB.Friedman 最好两者兼而有之,但代码长度更重要(数据库长约100行,是公司级数据库,不是高频股市交易的东西)