【问题标题】:How to create multiple columns with index function in R?如何在 R 中使用索引函数创建多个列?
【发布时间】:2020-06-24 17:57:02
【问题描述】:

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

复制数据:

D_s

这是我的数学模型的函数:

而不是做

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))
}

提前致谢!

【问题讨论】:

    标签: r function indexing dplyr


    【解决方案1】:

    我们可以循环使用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)
    

    【讨论】:

    • 谢谢!那么如何将新列添加到我的数据文件中?它显示在控制台中,但不在我的数据环境中?
    • @Kaya 只需分配data0 &lt;- map_dfc(1:3, ~ data0 %&gt;% .. 或新对象data1 &lt;- map_dfc(1:3, ~ ..
    • 哈哈有道理!谢谢!
    • 嗨,我刚刚意识到数字不正确,因为它们应该随着每一轮而减少。但是,使用当前代码,它们会增加。例如,总 D_s 为 259,因此 S A 的第 2 轮应产生 (34-(2-1)/259 = 0.127413。您知道我该如何解决吗?
    • @Kaya 你的代码是((D_s*(i-1))/sum(D_s)) 检查* 并且在你的计算中它是-34 -
    猜你喜欢
    • 2020-07-14
    • 2020-04-22
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多