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條經驗 獲得超8個贊
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 關注
- 839 瀏覽
添加回答
舉報