【发布时间】:2020-03-02 14:30:04
【问题描述】:
我有一个数据表,其中包含多个雨量计的降雨量测量值。这是我的数据集的示例:
library(data.table)
dat <- fread("https://www.dropbox.com/s/yub3db3739d80h2/dat.csv?dl=1")
> dat
ID date value
1: 937 2000-01-01 14.2
2: 937 2000-01-02 68.3
3: 937 2000-01-03 28.4
4: 937 2000-01-04 30.2
5: 937 2000-01-05 12.8
---
33905: 1600 2017-06-12 0.1
33906: 1600 2017-06-13 36.1
33907: 1600 2017-06-14 0.3
33908: 1600 2017-06-15 0.0
33909: 1600 2017-06-16 0.0
我还有一个数据表,其中包含每个仪表的 ID 以及最近的几个仪表的 ID,以及它们的降雨测量的常见日期:
neighbors <- fread("https://www.dropbox.com/s/phhskbhxsxmrxy1/neighbours.csv?dl=1")
> neighbors
ID ID_nearest common_date_begin common_date_end diff_days
1: 1 1117 2000-03-01 2006-12-03 2468
2: 1 920 2000-03-01 2004-11-04 1709
3: 1000 48 2000-03-01 2006-12-03 2468
4: 1000 1600 2000-03-01 2017-06-16 6316
5: 1000 937 2000-03-01 2017-01-22 6171
6: 1001 352 2007-07-10 2017-06-16 3629
7: 1001 324 2007-07-10 2017-06-16 3629
8: 1002 1338 2006-01-01 2017-06-16 4184
9: 1002 412 2006-01-01 2009-07-12 1288
10: 1002 1330 2006-01-01 2017-06-16 4184
11: 1002 1349 2006-01-01 2017-06-16 4184
12: 1009 801 2006-01-01 2017-01-22 4039
例如,仪表 ID 1 有两个近邻:ID 的 1117 和 920。台站1 和1117 的重叠测量周期从 2000 年 3 月 1 日到 2006 年 12 月 3 日。
对于neighbors 中这样的每个组合,我需要计算重叠日期内主要和周围仪表之间的降雨测量值的相关性。
例如,第一对的相关性可以这样计算:
cor(dat[ID==1 & date %between% c("2000-03-01", "2006-12-03")]$value,
dat[ID==1117 & date %between% c("2000-03-01", "2006-12-03")]$value)
cor(dat[ID==1 & date %between% c("2000-03-01", "2004-11-04")]$value,
dat[ID==920 & date %between% c("2000-03-01", "2004-11-04")]$value)
预期的输出将是这样的:
ID ID_nearest correlation n
1 1117 0.55 2468
1 920 0.48 1709
1000 48 0.77 2468
1000 1600 0.52 6316
1000 937 0.84 6171
对于neighbors 中的每个ID,依此类推。
但我很难想出一种编程方式来实现这一点。
我该怎么做?提前致谢。
【问题讨论】:
-
为什么不用循环?
-
@nigelhenry 因为通常情况下,它们在 R 中非常缓慢且效率低下。
-
...但是您通过简单的循环接受了答案
-
嗯,这是真正有效的答案,我真的需要完成这个分析才能继续我的研究。
标签: r data.table correlation