r - Dplyr 变异,列输出数量可变
问题描述
我正在尝试运行以下结构的函数:
my_fun <- function(new_var_names, input_var_names, df){
df %>%
mutate(...)
}
生成无限数量的新变量的地方。new_var_names
它们的名称使用具有可变长度的字符向量的每个元素。它们是使用字符向量中命名的变量作为输入生成的,这些变量input_var_names
使用一些函数f1
和f2
.
理想情况下,这应该在 mutate 内完成,而不使用映射或循环过程。
是否有可能适应 mutate 来做到这一点?
提前致谢。
解决方案
这是一种使用across
and的方法rename_at
。谁知道什么时候rename
会across
添加功能:
my_fun <- function(new_var_names, input_var_names, df){
df %>%
mutate(across(.cols = one_of(input_var_names), .names = "New.{.col}",
~ . * 100)) %>%
rename_at(vars(paste0("New.",input_var_names)),~new_var_names)
}
my_fun(c("NewX1","NewX2"),c("X1","X2"),data)
X1 X2 X3 X4 NewX1 NewX2
1 76.512308 59.52818 35.45349 53.071453 7651.2308 5952.818
2 90.432867 53.60952 55.91350 87.441985 9043.2867 5360.952
3 82.226977 39.00973 14.58712 87.100901 8222.6977 3900.973
4 8.071753 32.63577 78.70822 3.345176 807.1753 3263.577
5 1.385738 81.03024 88.79939 97.613080 138.5738 8103.024
6 6.167663 5.15003 21.20549 49.532196 616.7663 515.003
7 86.789458 37.01053 77.29167 39.527862 8678.9458 3701.053
8 58.048272 85.80310 60.03993 42.337941 5804.8272 8580.310
9 32.070415 70.09671 95.80930 10.199656 3207.0415 7009.671
10 95.987113 68.76416 16.71015 17.019112 9598.7113 6876.416
你可以用~ . * 100
你想要的任何功能替换。
样本数据:
data <- data.frame(replicate(4,runif(10,1,100)))