在R中查找并用data.table替换值?

在R中查找并用data.table替换值?,r,data.table,R,Data.table,在阅读了R方法的基准测试和速度比较之后,我正在转换为speedydata.table包,以便对我的大型数据集进行数据操作 我在执行某项特定任务时遇到困难: 对于某个观测变量,我想检查每个站的绝对滞后差(滞后1)是否大于某个阈值。如果是,我想用NA替换它,否则什么也不做 我可以使用set命令对整个数据表执行此操作,但我需要按站点执行此操作 例如: # Example data. Assume the columns are ordered by date. set.seed(1) DT <-

在阅读了R方法的基准测试和速度比较之后,我正在转换为speedy
data.table
包,以便对我的大型数据集进行数据操作

我在执行某项特定任务时遇到困难:

对于某个观测变量,我想检查每个站的绝对滞后差(滞后1)是否大于某个阈值。如果是,我想用
NA
替换它,否则什么也不做

我可以使用
set
命令对整个
数据表执行此操作,但我需要按站点执行此操作

例如:

# Example data. Assume the columns are ordered by date.
set.seed(1)
DT <- data.table(station=sample.int(n=3, size=1e6, replace=TRUE), 
                 wind=rgamma(n=1e6, shape=1.5, rate=1/10),
                 other=rnorm(n=1.6),
                 key="station")

# My attempt
max_rate <- 35
set(DT, i=which(c(NA, abs(diff(DT[['wind']]))) > max_rate), 
    j=which(names(DT)=='wind'), value=NA)
# The results
summary(DT)
#示例数据。假设列是按日期排序的。
种子(1)

DT一种方法是使用特殊变量
.I
获取要替换的行号,然后使用
:=
运算符(或
set
)通过引用将
NA
分配给这些行


通过在LHS上提供导致相应索引的表达式和在RHS上替换为的值,由@eddi在实施时/如果实施,将有一种更自然的方式来完成此任务。也就是说,在未来,我们应该能够做到:

# in the future - a more natural way of doing the same operation shown above.
DT[, wind[which(c(NA, diff(wind)) > 35)] := NA_real_, by=station]

非常感谢你。到目前为止,我非常喜欢
data.table
软件包,但确实有一条学习曲线来自
plyr
。你知道我在哪里可以找到
数据.表格
特殊变量的文档(例如
.I
.SD
NA\u real\u
,等等)?另外,我为该功能请求提供了+1!这与我在惨败前的尝试/预期相似。NA_real_ur表示数值类型的NA。其他特殊变量记录在
?data.table
中。确保阅读
示例(data.table)
(也在
?data.table
)并逐个运行它们,了解发生了什么。
# in the future - a more natural way of doing the same operation shown above.
DT[, wind[which(c(NA, diff(wind)) > 35)] := NA_real_, by=station]