如何仅对参与其他数据集中条件的变量执行函数?

问题描述 投票:0回答:1

我有一个时间序列数据集“基础”,如下所示:

日期 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”中的所有变量。谢谢

r conditional-statements
1个回答
0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.