我想df
通过将函数f
应用于每一行来处理数据框中的所有行。当函数f
返回带有两个元素的数值向量时,我想将单个元素分配给中的新列df
。
Sample df
,琐碎的函数f
返回两个元素和我的试用apply
df <- data.frame(a = 1:3, b = 3:5)
f <- function (a, b) {
c(a + b, a * b)
}
df[, c('apb', 'amb')] <- apply(df, 1, function(x) f(a = x[1], b = x[2]))
这不起作用,结果是按列分配的:
> df
a b apb amb
1 1 3 4 8
2 2 4 3 8
3 3 5 6 15
您也可以使用Reduce
代替,apply
因为它通常更有效。您只需要稍微修改功能即可使用,cbind
而不是c
f <- function (a, b) {
cbind(a + b, a * b) # midified to use `cbind` instead of `c`
}
df[c('apb', 'amb')] <- Reduce(f, df)
df
# a b apb amb
# 1 1 3 4 3
# 2 2 4 6 8
# 3 3 5 8 15
注意:仅当只有两列(如您的示例)时,此方法才能很好地工作,因此,如果数据集中有更多列,则仅在一个子集上运行
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句