更改列并修改标题中的列名称

我想编写一个函数,该函数将所有列的日志记录成小标题:

test<-tibble(date=c("1992-01-01","1992-01-02"),value1=c(1,2),value2=c(3,4))

对我来说,困难在于我想将对数变量附加为新列,并且变量名称应采用以下形式:例如:value_l。在dplyr中,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",4),value1_l=log(c(1,2)),value2_l=log(c(3,4)))
dilixinxi123 回答:更改列并修改标题中的列名称

这是使用dplyr::mutate_at

的方法
  test %>%
    mutate_at(
      .vars = vars(contains("value")),.funs = list(l = ~log(.))
      )
,

这是我遇到此问题时使用的基本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
,

另一种tidyverse解决方案,可以推广除value1value2以外的更多列。

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://www.f2er.com/3158383.html

大家都在问