我想在R中的数据框中引用多个列的所有行上应用函数。例如,如果我有一个名为“data”的数据框,其中包含三个变量“var1”,“var2”和“ var3“我希望将函数应用于每一行:
myfunc <- function(var1, var2, var3)){
result <- var1*var2*var3
return(result)
}
然后伪代码将是:
apply(data, myfunc(data$var1, data$var2, data$var3))
但是,此代码不起作用,因为数据是数据框,而不是矢量,而lapply似乎不能使用多个矢量。我该如何工作?我对任何类型的解决方案持开放态度,但我必须能够引用多个更改的参数并调用预定义的函数。
答案 0 :(得分:3)
你似乎相当接近,但你在电话中失踪了一点。
apply(data, 1, function(x,y,z) myfunc(data$var1,data$var2,data$var3))
似乎可以解决问题。
编辑:我在数据集上测试了这个
data<-data.frame(a=c(1,2,3),b=c(4,5,6),c=c(7,8,9))
并获得输出
[,1] [,2] [,3]
[1,] 28 28 28
[2,] 80 80 80
[3,] 162 162 162
答案 1 :(得分:2)
无需apply
:
#define function
myfunc <- function(var1, var2, var3){
result <- var1*var2*var3
return(result)
}
#dummy data
dat <- data.frame(A=c(1,2,3),B=c(4,5,6),C=c(7,8,9))
#test function
myfunc(dat$A,dat$B,dat$C)
#output
[1] 28 80 162
答案 2 :(得分:1)
这是一个未经测试的(没有提供可重现的示例)建议:
myfunc <- function(x)){
result <- x$var1*x$var2*x$var3
return(result)
}
apply(data, 1, myfunc)
答案 3 :(得分:0)
您还可以使用mapply
:
myfnct<-function(x,y,z) {(x+y)*z}
df<-data.frame('x'=1:5, 'y'=2:6, 'z'=3:7)
mapply(myfnct, df$x, df$y, df$z)
同样,请在此处查看类似问题的答案:https://stackoverflow.com/a/4393444/8198984