【问题标题】:apply a function across numbered variables in r在 r 中跨编号变量应用函数
【发布时间】:2017-04-14 05:42:07
【问题描述】:

给定以下数据框(“数据”):

data <- data.frame(a1 = sample(10), b1 = rep(0,10), c1 = sample(10), 
               a2 = rep(0,10), b2 = sample(10), c2 = sample(10),
               a3 = sample(10), b3 = sample(10), c3 = sample(10))

我创建了一个函数来根据 3 个条件进行计算:

calcs <- function(a, b, c){
if ((max(a) > 0) & (max(b)>0)){
maxa <- max(a)
maxb <- max(b)
maxc <- max(c)
calc = 75*c/maxc + 12.5*a/maxa + 12.5*b/maxb
}
else if ((max(a) > 0) & (max(b)==0)){
maxa <- max(a)
maxc <- max(c)
calc = 75*c/maxc + 25*a/maxa 
}

else {
maxc <- max(c)
maxb <- max(b)
calc = 75*c/maxc + 25*b/maxb 
}
}

我想将此函数应用于数据帧,循环编号变量(从 1 到 3),而不是使用以下代码:

data$calc1 <- calcs(data$a1,data$b1,data$c1)
data$calc2 <- calcs(data$a2,data$b2,data$c2)
data$calc3 <- calcs(data$a3,data$b3,data$c3)

我在别处看过,显然是一个简单的问题,但由于列表、lapply 等上的各种“工具”文档,我不确定最佳行动方案。

【问题讨论】:

    标签: r function loops lapply


    【解决方案1】:

    我们可以将Map 与列的“a”、“b”和“c”子集的输入一起用作输入。

    data[paste0("calc", 1:3)] <- Map(calcs, 
              data[paste0("a", 1:3)], data[paste0("b", 1:3)], data[paste0("c", 1:3)])
    

    【讨论】:

    • 非常感谢@akrun。对基本函数的出色介绍,我可以在其中跨数据框使用“用户创建的函数”。老派。
    猜你喜欢
    • 2022-01-17
    • 2021-07-13
    • 2019-01-21
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多