R函数:在函数中使用参数作为名称
我在R中创建了一个用户函数,将两列相乘以创建第三列(在一个系列中),因此该函数将创建4个新列R函数:在函数中使用参数作为名称,r,function,dplyr,R,Function,Dplyr,我在R中创建了一个用户函数,将两列相乘以创建第三列(在一个系列中),因此该函数将创建4个新列 create_mult_var <- function(.data){ .data <-.data%>% mutate(Q4_1_4 = Q4_1_2_TEXT*Q4_1_3_TEXT) %>% mutate(Q4_2_4 = Q4_2_2_TEXT*Q4_2_3_TEXT) %>% mutate(Q4_3_4 = Q4_3_2_TEXT*Q4
create_mult_var <- function(.data){
.data <-.data%>%
mutate(Q4_1_4 = Q4_1_2_TEXT*Q4_1_3_TEXT) %>%
mutate(Q4_2_4 = Q4_2_2_TEXT*Q4_2_3_TEXT) %>%
mutate(Q4_3_4 = Q4_3_2_TEXT*Q4_3_3_TEXT) %>%
mutate(Q4_4_4 = Q4_4_2_TEXT*Q4_4_3_TEXT)
.data
或者类似的东西来创建这些新列?任何建议都将不胜感激!非常感谢。如果这是一个坏主意,有没有关于我应该如何处理这个问题的建议?我们可以使用
粘贴
并使用进行评估代码>
create_mult_var_2 <- function(.data, pat){
.data <-.data%>%
mutate(!! str_c(pat, '_1_4') :=
!! rlang::sym(str_c(pat, '_1_2_TEXT')) *
!! rlang::sym(str_c(pat, '_1_3_TEXT')))
.data
}
create_mult_var_2(data_in, "Q4")
# Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1 1 5 5
#2 2 6 12
#3 3 7 21
#4 4 8 32
数据
data\u,谢谢!创建一个变量(Q4_1_4)很方便,我需要为每个问题类型(Q4_2_4、Q4_3_4和Q4_4_4)创建4个变量,Q4。我修改了您的答案以创建所有四个,但我得到一个错误:@NewBee错误是什么?我只展示了一个,因为它更容易复制/粘贴和创建更多!!rlang::sym(str_c(pat,:找不到函数):=“@NewBee你能试试这个函数吗create_mult\u var\u 3
非常感谢你的帮助!!!
create_mult_var <- function(.data,question){
.data <-.data%>%
mutate(question_1_4 = question_1_2_TEXT*question_1_3_TEXT) %>%
mutate(question_2_4 = question_2_2_TEXT*question_2_3_TEXT) %>%
mutate(question_3_4 = question_3_2_TEXT*question_3_3_TEXT) %>%
mutate(question_4_4 = question_4_2_TEXT*question_4_3_TEXT)
.data
}
data_in %>% create_mult_var("Q4") %>% create_mult_var("Q8")
create_mult_var_2 <- function(.data, pat){
.data <-.data%>%
mutate(!! str_c(pat, '_1_4') :=
!! rlang::sym(str_c(pat, '_1_2_TEXT')) *
!! rlang::sym(str_c(pat, '_1_3_TEXT')))
.data
}
create_mult_var_2(data_in, "Q4")
# Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1 1 5 5
#2 2 6 12
#3 3 7 21
#4 4 8 32
library(dplyr)
library(stringr)
create_mult_var_3 <- function(.data, pat) {
.data %>%
mutate(across(matches(str_c("^", pat, "_\\d+_2")), ~
.* get(str_replace(cur_column(), '_2_TEXT', '_3_TEXT')),
.names = '{.col}_new')) %>%
rename_at(vars(ends_with('_new')),
~ str_replace(., '\\d+_TEXT_new', '4'))
}
create_mult_var_3(data_in, "Q4")
# Q4_1_2_TEXT Q4_1_3_TEXT Q4_1_4
#1 1 5 5
#2 2 6 12
#3 3 7 21
#4 4 8 32
data_in <- data.frame(Q4_1_2_TEXT = 1:4, Q4_1_3_TEXT = 5:8)