我有一个时间序列数据集“基础”,如下所示:
日期 | var1 | var2 | var3 | var4 | ... |
---|---|---|---|---|---|
... | ... | ... | ... | ... | ... |
var1、var2、var3 和 var4 是数字。在现实中,表格有几十列和行。
我的另一个数据集“transform”,如下所示:
变量 | 价值 |
---|---|
var1 | 2 |
var2 | 5 |
var3 | 1 |
var4 | 5 |
“值”数字从 1 到 6。
在“base”中,我想执行转换以获取与数据集“transform”中与“5”相关的变量的日志差异。我该怎么做? 我尝试过:
transformation5 <- transform %>%
filter(value == 5) %>%
pull(variable)
base <- base %>%
mutate_at(vars(transformation5), ~ diff(log(.)))
但由于某种原因,它考虑了“base”中的所有变量。谢谢
transform
,如图所示。首先找到所需的列,
ix
,然后使用across
,目前人们更喜欢使用mutate_at
。还要确保该函数返回一个与输入具有相同行数的向量。我们添加 NA 来确保这一点。library (dplyr)
transform <- data.frame(Time = 3, demand = 5)
ix <- which(transform == 5) # 2
BOD %>%
mutate(across(any_of(ix), ~ c(NA, diff(log(.x)))))
给予
Time demand
1 1 NA
2 2 0.21588838
3 3 0.61229508
4 4 -0.17185026
5 5 -0.02531781
6 7 0.23841102