我是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