我是 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
我想在其中添加一site.type
列,monitoring
其中提取的信息sites
如下所示:
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 条记录的真实数据集时,它从未停止在具有 16 GB RAM 的 i5-2400 计算机上运行......
我尝试在 stackoverflow 上搜索现有问题,并确实找到了一些为类似场景提供相同解决方案的答案,因此更加困惑为什么它在我的情况下不起作用。所以,
- 有人可以指出问题出在哪里吗?
- 请问
for
在这种情况下如何避免循环,因为它可能不那么“时尚”和高效?:)
提前谢谢了。