私はRを初めて使用し、環境監視データを操作するときにこの問題に戸惑っています。
実際のモニタリング時系列とモニタリング サイト情報をそれぞれ記録する 2 つのデータセットがあります。それらを2つのデータフレームに保存しまし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
この場合、「ファッショナブル」で効率的ではない可能性があるため、ループを回避する方法を尋ねてもよろしいですか? :)
よろしくお願いします。