繁体   English   中英

如何在 R 中创建索引为 function 的多列?

[英]How to create multiple columns with index function in R?

我想在 R 中创建 ak 列数,该列由索引 k 确定,该索引也是底层 function 的一部分。

复制数据:

D_s<-c(34,36,27,23,30,49,60)
S<-c("A","B","C","D","E","F","G")
data0<-data.frame(S, D_s)

这是我的数学 model 的 function:

而不是做

data0<-data0 %>%
  mutate(
    Round1=((D_s*(1-1)/sum(D_s))),
    Round2=((D_s*(2-1)/sum(D_s))),
    Round3=((D_s*(3-1)/sum(D_s))),
    Round4=...
  )

我想有更好的方法可以做到这一点,形式为(显然不起作用,请不要判断):

for(k in 1:40){
data0<-data0 %>%
  mutate(Round_i=((D_s*(i-1))/sum(D_s))
}

提前致谢!

我们可以用map循环

library(purrr)
library(dplyr)
library(stringr)
map_dfc(1:3, ~ data0 %>%
                transmute(!! str_c("Round", .x) := ((D_s *(.x -1)/sum(D_s))))) %>%
    bind_cols(data0, .)
#  S D_s Round1     Round2    Round3
#1 A  34      0 0.13127413 0.2625483
#2 B  36      0 0.13899614 0.2779923
#3 C  27      0 0.10424710 0.2084942
#4 D  23      0 0.08880309 0.1776062
#5 E  30      0 0.11583012 0.2316602
#6 F  49      0 0.18918919 0.3783784
#7 G  60      0 0.23166023 0.4633205

最好创建一个 function 来执行此操作,因为它是重复任务

f1 <- function(data, i) with(data, ((D_s*(i-1)/sum(D_s))))
data0[paste0("Round", 1:3)] <- lapply(1:3, f1, data = data0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM