r - 使用每行的多个参数在数据帧的每一行上调用类似 apply 的函数

标签 r dataframe

我有一个包含多列的数据框。对于数据框中的每一行,我想在该行上调用一个函数,并且该函数的输入使用该行中的多个列。例如,假设我有这个数据和这个接受两个参数的 testFunc:

> df <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
> df
  x y z
1 1 3 5
2 2 4 6
> testFunc <- function(a, b) a + b

假设我想将此 testFunc 应用于 x 和 z 列。因此,对于第 1 行,我想要 1+5,对于第 2 行,我想要 2 + 6。有没有办法在不编写 for 循环的情况下完成此操作,也许可以使用 apply 函数系列?

我试过这个:

> df[,c('x','z')]
  x z
1 1 5
2 2 6
> lapply(df[,c('x','z')], testFunc)
Error in a + b : 'b' is missing

但是出现错误,有什么想法吗?

编辑:我想要调用的实际函数不是简单的求和,而是 power.t.test。我使用 a+b 只是为了示例目的。最终目标是能够做这样的事情(用伪代码编写):

df = data.frame(
    delta=c(delta_values), 
    power=c(power_values), 
    sig.level=c(sig.level_values)
)

lapply(df, power.t.test(delta_from_each_row_of_df, 
                        power_from_each_row_of_df, 
                        sig.level_from_each_row_of_df
))

其中结果是 df 每行的 power.t.test 的输出向量。

最佳答案

您可以将apply应用于原始数据的子集。

 dat <- data.frame(x=c(1,2), y=c(3,4), z=c(5,6))
 apply(dat[,c('x','z')], 1, function(x) sum(x) )

或者如果您的函数只是求和,请使用矢量化版本:

rowSums(dat[,c('x','z')])
[1] 6 8

如果你想使用testFunc

 testFunc <- function(a, b) a + b
 apply(dat[,c('x','z')], 1, function(x) testFunc(x[1],x[2]))

编辑要按名称而不是索引访问列,您可以执行以下操作:

 testFunc <- function(a, b) a + b
 apply(dat[,c('x','z')], 1, function(y) testFunc(y['z'],y['x']))

关于r - 使用每行的多个参数在数据帧的每一行上调用类似 apply 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059076/

相关文章:

r - 如何确定列中的日期是否唯一?

python - 如何缩短 DataFrame 中的某些子字符串

regex - 查找文件的正则表达式

r - 基于 R 中模型平均系数的部分残差图

python - 如何在数据框中添加列?

python - 读取数据时删除列包含某些字符串: python

python - 从数据框中检索行以在数据框的列中与列表中的元素进行部分匹配

r - R中的多重相关系数

r - 从 R 中的嵌套列表中提取数据

r - R 中线性回归线的 QR 分解(使用 qr.solve)