gpt4 book ai didi

r - 如何在R中使用索引函数创建多列?

转载 作者:行者123 更新时间:2023-12-04 09:36:25 24 4
gpt4 key购买 nike

我想在 R 中创建 k 个由索引 k 确定的列,该索引也是基础函数的一部分。
复制数据:

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)

This is the function of my mathematical model:

Instead of doing

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

最好创建一个函数来执行此操作,因为它是重复任务
f1 <- function(data, i) with(data, ((D_s*(i-1)/sum(D_s))))
data0[paste0("Round", 1:3)] <- lapply(1:3, f1, data = data0)

关于r - 如何在R中使用索引函数创建多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62561231/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com