【发布时间】:2020-08-19 09:07:50
【问题描述】:
我正在尝试编写一个函数来使用 tidyverse 工具自动创建一些新变量。我发现我的问题涉及到 tidyeval,但我还没有完全弄清楚我在下面的代码中哪里出错了,它只是复制了变量名。 作为第二步,除了 for 循环之外,我还想做一些事情来多次应用该函数。我已经阅读了足够多的 StackOverflow 回答 shaming for loops,但我找不到使用某种应用函数在现有数据帧上创建新变量的工作示例。谢谢!
library(tidyverse)
x = c(0,1,2,3,4)
y = c(0,2,4,5,8)
df <- data.frame(x,y)
df
simple_func <- function(x) {
var_name <- paste0("pre_", x, "_months")
var_name <- enquo(var_name)
df <- df %>%
mutate(!! var_name := ifelse(x==y,1,0)) %>%
mutate(!! var_name := replace_na(!! var_name))
return(df)
}
simple_func(1)
#Desired result
temp <- data.frame("pre_1_months" = c(1,0,0,0,0))
temp
bind_cols(df,temp)
#Step 2, use some kind of apply function rather than a loop to apply this function sequentially
nums <- seq(1:10)
for (i in seq_along(nums)) {
df <- simple_func(nums[i])
}
df
【问题讨论】: