在R中查找并用data.table替换值?
在阅读了R方法的基准测试和速度比较之后,我正在转换为speedy在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 <-
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]