如何仅对transform数据集value=5对应的base变量执行对数差分?
问题分析与解决
你代码的问题出在变量选择的语法错误:mutate_at(vars(transformation5), ...) 里的 vars() 会把 transformation5 当成一个变量名,而非你存储目标变量名的字符向量,这直接导致筛选失效,最终对所有变量执行了转换。
正确实现方式
推荐使用dplyr当前的标准语法across()(mutate_at已被软弃用),结合all_of()来指定字符向量中的目标变量:
# 第一步:筛选出需要转换的变量名(这部分你的代码是对的) transformation5 <- transform %>% filter(value == 5) %>% pull(variable) # 第二步:对指定变量执行对数差分转换 base <- base %>% mutate(across(all_of(transformation5), ~ diff(log(.))))
补充说明
all_of()用于明确告诉dplyr:你传入的是一个存储变量名的字符向量,而非直接引用数据框内的变量diff(log(.))会生成比原数据少一行的结果(第一行变为NA),如果需要保留原行数,可以用c(NA, diff(log(.)))补全:base <- base %>% mutate(across(all_of(transformation5), ~ c(NA, diff(log(.)))))
内容的提问来源于stack exchange,提问作者llb1706
相关产品推荐
相关产品推荐

