使用 apply(dataframe, margin = 1, function(current_row)),如何将正在操作的数据帧的当前行传递给函数?

问题描述 投票:0回答:1

我有一个需要数据帧行号的函数。

my_function <- function(row_number){
  old_dataframe[row_number,] <<- old_dataframe[row_number,]*5
}

apply(old_dataframe, margin = 1, my_function())

有没有办法将 apply() 函数中当前正在操作的行号作为参数传递给正在应用于数据帧的函数 - 在本例中是我的 function()?

apply(old_dataframe, margin = 1, myfunction(current_row_number))

我还没有找到与我的具体案例相关的主题。我想知道我是否缺少正确表达它的词汇。

我从代码中得到的问题实际上是这样的: “Ops.data.frame(fsrf[2 + band, ], fos[obs_row, ]) 中的错误:'*' 仅为相同大小的数据帧定义。”

但是,两个数据帧 fsrf[,] 和 fos[,] 的维度完全相同。在这种情况下,在函数内进行操作时,它们都拥有 1 行和 2101 个变量。它们确实是一样大小的。但我怀疑错误来自 apply() 函数按行将 my_function 应用于 old_dataframe 的方式。

r dataframe apply
1个回答
0
投票

问题是 apply 返回一个向量而不是数据框: 将您的代码修改为:

old_dataframe <- data.frame(
  A = 1:3,
  B = 4:6,
  C = 7:9
)

my_function <- function(row) {
  return(row * 5)
}

as.data.frame(t(apply(old_dataframe, 1, my_function)))

 A  B  C
1  5 20 35
2 10 25 40
3 15 30 45
© www.soinside.com 2019 - 2024. All rights reserved.