r-有条件地减去两个数据表

噻戈韦洛索

我有两个data.tables,用于显示多个位置的温度(由地址解析确定)。

我想基于它们的减法来创建第三个。他们来了:

library(data.table)

# Generate random data:
geocode <- paste0("N", 1:10)
dates <- seq(as.Date("2000-01-01"), as.Date("2004-12-31"), by="month")
models <- c("A", "B", "C", "D", "E")
temp <- runif(length(geocode)*length(dates)*length(models), min=0, max=30)
dt1 <- data.table(expand.grid(Location=geocode,Date=dates,Model=models),Temperature=temp)


ref <- runif(length(geocode), min=0, max=30)
dt2 <- data.table(expand.grid(Location=geocode), Temperature=ref)

我想有条件地从dt1中减去dt2。通过每个位置(地理编码),我想从dt1中的温度中减去dt2中的温度,并保留其他列(DateModel)。

如何实现呢?如果它是单个数据表,我会知道该怎么做,但我以前从未尝试过像这样在两个不同的数据表上做代数。

坦率

我认为这可行:

dt1[dt2, on=.(Location), td := x.Temperature - i.Temperature, by=.EACHI]

      Location       Date Model Temperature          td
   1:       N1 2000-01-01     A    3.949276 -19.2110455
   2:       N2 2000-01-01     A    2.811684 -11.6405195
   3:       N3 2000-01-01     A   24.069659  13.6159779
   4:       N4 2000-01-01     A   25.809426  -1.8793405
   5:       N5 2000-01-01     A   25.193624  19.6812965
  ---                                                  
2996:       N6 2004-12-01     E   24.298463   4.0218859
2997:       N7 2004-12-01     E    1.488011 -26.4472283
2998:       N8 2004-12-01     E   27.489108   5.6525076
2999:       N9 2004-12-01     E    3.487664  -5.9926003
3000:      N10 2004-12-01     E    8.523718  -0.7559126

目测...

dt2[dt1[1:5], on=.(Location), .(Location, t1 = i.Temperature, t2 = x.Temperature)]

   Location        t1        t2
1:       N1  3.949276 23.160321
2:       N2  2.811684 14.452204
3:       N3 24.069659 10.453681
4:       N4 25.809426 27.688766
5:       N5 25.193624  5.512328

在我看来不错。


这个怎么运作

更新联接的语法为x[i, v := expr, by=.EACHI]在表达式内部i.*x.*可以使用前缀来阐明从何处获取列。

by=.EACHI可能并不需要,但我通常使用它的这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用rbind和lapply在R中具有相同列的两个数据框之间有条件地复制行

有条件地合并SAS中的两个数据表

在 R 中,根据左侧表中指示变量的值,有条件地左连接两个表

有条件地写入R中的数据表列

有条件地替换多个数据框的值R

通过引用两列的条件组合R中的两个数据表

有条件地填充 R 中的缺失数据

R 有条件地删除数据框

从 R 中的第二个数据帧有条件地更新数据帧

在r中使用for循环函数减去行并有条件地打印输出

如何有条件地减去r中的行值

R-有条件地用另一个数据框中的值替换值

有条件地查找另一个数据框中的值以填充 R 中的列

R:不断更新每个数据点的平均值,有条件地重置

基于 R 中列中的两个变量有条件地过滤组中的值

R:有条件地将数据从一个数据帧提取到另一个数据帧

如果高于 R 中的某个阈值,则有条件地将数据帧中的值乘以另一个数据帧

从R中的数据帧中有条件地提取数据

有条件地修改 R 数据框中的所有数值?

基于嵌套成员资格有条件地连接 R 表

如何按R中的多列有条件地对数据框排序?

从 R 中的重复数据有条件地选择第 n 个 obs

如何在r中有条件地拆分数据帧?

R - 如何有条件地将连续列添加到数据框?

使用R有条件地删除数据框行

R:有条件地替换数据框中几列中的值

R 数据框基于每季度的列值有条件地聚合

有条件地填充缺失值,同时重塑R中从长到宽的数据集

有条件地在R中子集数据帧列表