R填充数据框应用函数,获取多个列和行中的参数

时间:2018-04-25 22:22:33

标签: r loops dictionary apply sapply

我有一个空白值网格,我想用一个在给定行和列中包含多个参数的函数来填充。

以下是一个例子:

#make up var1 and var2 and join into data frame
var1 <- rnorm(500, 5, 2)
var2 <- rnorm(500, 20, 20)
df <- data.frame(var1, var2)

#define columns
x_values <- as.character(1:100)

#create columns of df and fill with NA
df[, x_values] <- NA

#define function that determines values in each cell
my_funct <- function(var1, var2, col){
  (var1^3 - var2^2)*col
}

我的数据看起来像

       var1       var2  1  2  3  4  5  6
1 7.0570704  31.508049 NA NA NA NA NA NA
2 0.6965604  32.288748 NA NA NA NA NA NA
3 4.9869819   4.369592 NA NA NA NA NA NA
4 8.0933870  31.038571 NA NA NA NA NA NA
5 6.1667702  26.887448 NA NA NA NA NA NA
6 3.1476294 -10.806836 NA NA NA NA NA NA

对于此数据框的每个特定单元格df[i, j],我想使用my_funct的输出填充它,该输出采用输入df[i, 'var1'],{{1} }和列名值(我可以简单地使用j-2)。

我写了一个嵌套循环,遍历每一行和每列,但它非常慢。我猜测应用或地图功能会更有效率。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您应该能够迭代列而不迭代行:

res <- sapply(1:100, function(i) {
  my_funct(df[, "var1"], df[, "var2"], i)
})

sapply返回一个矩阵,其中每列对应i