R中的顺序计算失败

Sequential calculations fail in R

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

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

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 的类似尝试。

我该怎么做才能得到我的:constant * bb * cc * dd?它们是百分比,这就是为什么我有 (1+... there

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