我是R新手,在操作某些环境监控数据时,对此问题感到困惑。如何根据另一个数据帧中的值引用一个数据帧中的值?
我有两个数据集分别记录实际监测时间序列和监测点信息。我将它们存储在两个数据帧monitoring
和sites
:
monitoring:
date site obs
1 2001-01-01 10:00:00 riverside NA
2 2001-01-01 11:00:00 riverside 52
3 2001-01-01 12:00:00 riverside 52
4 2001-01-01 13:00:00 riverside 56
5 2001-01-01 10:00:00 dorm 52
6 2001-01-01 11:00:00 dorm 64
7 2001-01-01 12:00:00 dorm 76
8 2001-01-01 13:00:00 dorm 80
9 2001-01-01 10:00:00 kfc 78
10 2001-01-01 11:00:00 kfc 74
11 2001-01-01 12:00:00 kfc 66
12 2001-01-01 13:00:00 kfc 68
sites:
site type
1 DORM suburban
2 KFC urban
3 RIVERSIDE rural
我想在monitoring
与来自sites
提取信息添加site.type
列如下所示:
date site obs site.type
1 2001-01-01 10:00:00 riverside NA rural
2 2001-01-01 11:00:00 riverside 52 rural
3 2001-01-01 12:00:00 riverside 52 rural
4 2001-01-01 13:00:00 riverside 56 rural
5 2001-01-01 10:00:00 dorm 52 suburban
6 2001-01-01 11:00:00 dorm 64 suburban
7 2001-01-01 12:00:00 dorm 76 suburban
8 2001-01-01 13:00:00 dorm 80 suburban
9 2001-01-01 10:00:00 kfc 78 urban
10 2001-01-01 11:00:00 kfc 74 urban
11 2001-01-01 12:00:00 kfc 66 urban
12 2001-01-01 13:00:00 kfc 68 urban
我在下面的命令尝试grep()
:
for (i in 1:nrow(monitoring)) {
monitoring$site.type[i] <- as.character(sites$type[grep(monitoring$site[i], sites$site, ignore.case = T)])
}
它的工作确定对这个小例子设置的monitoring
。然而,当我将它应用到我的真实数据集上时,它的记录数是654,525,它在我的i5-2400计算机上永不停止运行,内存为16GB RAM。同样的解决方案,以类似的情况,所以更加困惑为什么它不起作用在我的情况。因此,
- 有人可以指出问题出在哪里吗?
- 请问如何避免
for
在这种情况下循环,因为它可能不会像“时髦”和高效? :)
非常感谢提前。
'?merge'应该运行得更好...... –
做那些2'data.frame's有相同的尺寸? – aL3xa
@BenBolker谢谢你指点我正确的方向 - 如果匹配的列有不同的大写内容(请参阅下面的@ 1月份的解决方案),是否有任何一步解决方案来“合并”两者? – elarry