我想写一个函数,它接受tibble中所有列的日志:
test<-tibble(date=c("1992-01-01","1992-01-02"),
value1=c(1,2),
value2=c(3,4))对我来说困难的是,我想要将对数变量附加为一个新列,并且变量名应该具有以下形式:例如: value_l。在mutate_all中,这应该是可能的,但似乎不可能在那里添加一个向量。
test %>%
select(-"date") %>%
mutate_at(funs(!!paste0(colnames(test)[2],"_l") := log(.)))我的代码给了我:
Error: The LHS of `:=` must be a string or a symbol
Call `rlang::last_error()` to see a backtrace.有没有办法绕过这一点,同时留在dplyr宇宙中?
test<-tibble(date=c("1992-01-01","1992-01-02"),
value1=c(1,2),
value2=c(3,4),
value1_l=log(c(1,2)),
value2_l=log(c(3,4)))发布于 2019-11-05 23:34:45
这就是使用dplyr::mutate_at完成此操作的方法
test %>%
mutate_at(
.vars = vars(contains("value")),
.funs = list(l = ~log(.))
)发布于 2019-11-05 23:31:38
这是我在遇到这个问题时使用的基础R解决方案:
test[paste0(names(test)[-1], "_log")] <- lapply(test[-1], log)
date value1 value2 value1_log value2_log
<chr> <dbl> <dbl> <dbl> <dbl>
1 1992-01-01 1 3 0 1.10
2 1992-01-02 2 4 0.693 1.39发布于 2019-11-05 23:38:32
另一个tidyverse解决方案,它泛化了value1和value2之外的更多列。
tibble(
date=c("1992-01-01","1992-01-02"),
value1=c(1,2),
value2=c(3,4)
) %>%
mutate_at(vars(-date), funs(l = log(.)))https://stackoverflow.com/questions/58714550
复制相似问题