【发布时间】:2015-01-13 09:53:14
【问题描述】:
我想通过将函数f 应用于每一行来处理数据框df 中的所有行。由于函数f 返回带有两个元素的数字向量,我想将单个元素分配给df 中的新列。
示例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
【问题讨论】:
-
你知道你可以做到矢量化,即没有
apply,像这样:df$apb <- df$a + df$b; df$amb <- df$a * df$b? -
@docendodiscimus 是的,这只是玩具示例,我的真实函数要复杂得多——将其拆分为更多返回单个元素的函数/表达式并非易事。
-
好的,我已经认为可能是这种情况..