【问题标题】:Sequential calculations fail in RR中的顺序计算失败
【发布时间】:2020-10-13 16:28:22
【问题描述】:

我尝试在数据框中使用常量和多个变量进行一些计算。

例如我们可以使用下面的虚拟数据

constant <- 100
df <- as.data.frame(cbind(c(1,2,3,4,5),
            c(4,3,6,1,4),
            c(2,5,6,6,2),
            c(5,5,5,1,2),
            c(3,6,4,3,1)))
colnames(df) <- c("aa", "bb", "cc", "dd", "ee")

现在说,对于我的数据帧中的每一行,我想将常量乘以变量 bb,然后是 cc,然后是 dd。我试过了

answers <- sapply(df, function(x) constant * (1 + x[,2:4])

以及类似的 lapply 尝试。

我将如何做才能得到我的:常量 * bb * cc * dd?它们是百分比,这就是为什么我有 (1+... 那里

【问题讨论】:

    标签: r dataframe sequence calculation


    【解决方案1】:

    apply()试试这个方法:

    #Data
    constant <- 100
    df <- as.data.frame(cbind(c(1,2,3,4,5),
                              c(4,3,6,1,4),
                              c(2,5,6,6,2),
                              c(5,5,5,1,2),
                              c(3,6,4,3,1)))
    colnames(df) <- c("aa", "bb", "cc", "dd", "ee")
    #Apply
    answers <- as.data.frame(t(apply(df,1, function(x) constant * (1 + x))))
    

    输出:

    answers
       aa  bb  cc  dd  ee
    1 200 500 300 600 400
    2 300 400 600 600 700
    3 400 700 700 600 500
    4 500 200 700 200 400
    5 600 500 300 300 200
    

    或者使用dplyracross()

    library(dplyr)
    #Code
    answer <- df %>% mutate(across(everything(),~constant * (1 + .)))
    

    输出:

       aa  bb  cc  dd  ee
    1 200 500 300 600 400
    2 300 400 600 600 700
    3 400 700 700 600 500
    4 500 200 700 200 400
    5 600 500 300 300 200
    

    或者同sapply():

    #Code 3
    answers <- sapply(df,function(x) constant * (1 + x))
    answers <- as.data.frame(answers)
    

    输出:

       aa  bb  cc  dd  ee
    1 200 500 300 600 400
    2 300 400 600 600 700
    3 400 700 700 600 500
    4 500 200 700 200 400
    5 600 500 300 300 200
    

    或者这些选项中的任何一个都会产生相同的输出:

    #Code 4
    answers <- as.data.frame(do.call(cbind,lapply(df,function(x) constant * (1 + x))))
    #Code 5
    answers <- as.data.frame(mapply(function(x) constant * (1 + x),x=df))
    

    【讨论】:

      猜你喜欢
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多