我有一个包含多个连续变量的数据框。我需要生成每个连续变量的对数。每个新变量的名称必须在原变量名后加上_ln组成。我想生成一个循环来完成这项任务。对单个变量执行此操作的代码是:
dat <- data.frame(fev1 = c(3.4, 5.8, 3.1, NA),
fvc = c(3.9, 6.2, 4.5, 6.0),
rat = c(0.8, 0.91, 0.9, NA),
sex = c(0, 1, 0, 1))
var <- sym('fev1')
dat <-
dat %>%
mutate('{{vari}}_ln':= log({{vari}}))
names(dat)
[1] "fev1" "fvc" "rat" "sex" "fev1_ln"
我使用以下代码来制作循环:
vars <- c('fev1', 'fvc', 'rat')
purrr::map(dat[vars], ~.x %>%
vs <- sym(~.x) %>%
mutate('{{vs}}_ln':= log({{vs}})))
然而,并没有成功。错误消息是:
sym()
中的错误:
!无法将对象转换为符号。
我怎样才能为这个任务创建一个循环?
谢谢
我猜你要找的是这个:
library(tidyverse)
setNames(purrr::map_df(dat[vars], log), paste0(vars, "_ln"))
输出:
# A tibble: 4 × 3
fev1_ln fvc_ln rat_ln
<dbl> <dbl> <dbl>
1 1.22 1.36 -0.223
2 1.76 1.82 -0.0943
3 1.13 1.50 -0.105
4 NA 1.79 NA
使用映射函数的第一步是弄清楚它映射的内容。对于数据框,它映射到列上。每个
.x
或 .y
都是一个向量或列表,并且您不会对其中任何一个调用 mutate。
我会给出更具体的建议,但很难说出你的代码中发生了什么,抱歉!!