3 回答
TA贡献1887条经验 获得超5个赞
您可以将其应用于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']))
TA贡献1725条经验 获得超7个赞
dplyr套餐的新答案
如果要应用的功能是矢量化的,则可以使用软件包中的mutate功能dplyr:
> library(dplyr)
> myf <- function(tens, ones) { 10 * tens + ones }
> x <- data.frame(hundreds = 7:9, tens = 1:3, ones = 4:6)
> mutate(x, value = myf(tens, ones))
hundreds tens ones value
1 7 1 4 14
2 8 2 5 25
3 9 3 6 36
plyr包装的旧答案
我认为,最适合该任务的工具mdply来自plyr包装。
例:
> library(plyr)
> x <- data.frame(tens = 1:3, ones = 4:6)
> mdply(x, function(tens, ones) { 10 * tens + ones })
tens ones V1
1 1 4 14
2 2 5 25
3 3 6 36
不幸的是,正如Bertjan Broeksema指出的那样,如果您没有在mdply调用中使用数据帧的所有列,则此方法将失败。例如,
> library(plyr)
> x <- data.frame(hundreds = 7:9, tens = 1:3, ones = 4:6)
> mdply(x, function(tens, ones) { 10 * tens + ones })
Error in (function (tens, ones) : unused argument (hundreds = 7)
- 3 回答
- 0 关注
- 792 浏览
添加回答
举报