r-Dplyr随着列输出数量的变化而变化

  • 本文关键字:变化 输出 r-Dplyr r dplyr
  • 更新时间 :
  • 英文 :


我正在尝试运行以下结构的函数:

my_fun <- function(new_var_names, input_var_names, df){
df %>%
mutate(...)
}

其中生成了不确定数量的新变量。它们的名称使用具有可变长度的字符向量new_var_names的每个元素。它们是使用在字符向量input_var_names中命名的变量作为输入,使用一些函数f1f2来生成的。

同样理想的情况下,这应该在mutate中完成,而不使用映射或循环过程。

有可能适应变异来做到这一点吗?

提前谢谢。

这里有一个使用acrossrename_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)))

当然可以,看看这个:

data <- data.frame(L=letters,X=runif(26),Y=rnorm(26))
# Make a Cumsum in X and Y at the same time.
my_fun <- function(new_var_names, input_var_names, df) {

df %>% mutate(across(.cols = input_var_names, 
.fns  = cumsum,
.names = paste0(new_var_names,'{.col}') ))

}
my_fun(new_var_names="cumsum_",input_var_names=c("X","Y"),df=data)

# Make a Cumsum and  CumMax in X and Y at the same time.
my_fun <- function(new_var_names, input_var_names, df) {

df %>% mutate(across(.cols = input_var_names, 
.fns  = list(CumSum=cumsum,CumMax=cummax),
.names = paste0(new_var_names,'{.fn}_{.col}') ))

}
my_fun(new_var_names="New_",input_var_names=c("X","Y"),df=data)

最新更新