我有一个相当大的R数据帧。我希望使用mapply从几个列中获取输入,并将它们逐行传递给一个函数,从中返回将是一个5位数字向量,我希望再分配一行,行基础,原始数据框中的十列。
到目前为止一切顺利,而且工作正常。
但另外我希望能够在行的子集上执行此操作。
因此,为my.function
中的所有行调用“my.df
”函数,使用列my.df$a
,my.df$b
和my.df$c
作为输入,并输出到例如my.df
列11到15,语法将是;
my.df[,11:15]<-mapply(my.function, my.df$a, my.df$b, my.df$c)
但是,如果我想在数据框的一个大但不完整的子集上运行它,语法似乎有点麻烦。
如果我说my.subset是包含行子集的向量,那么语法就是这样;
my.df[my.subset,11-15]<-mapply(my.function, my.df$a[my.subset], my.df$b[my.subset], my.df$c[my.subset])
似乎有点长篇大论,不断提及[my.subset
]
有没有更简洁但可读的方法呢?
附录:理想情况下,解决方案不会阻止我在将来进行此并行调用,因为我需要处理一些相当大的数据帧并希望更有效地开始使用该机器。
答案 0 :(得分:1)
大肆猜测数据,功能和输出是什么样的
library(plyr)
library(dplyr)
my.df %>%
adply(1, function(x) (x$x - x$y)/x$z * 1:5)
对数据子集执行此操作,将slice
添加到管道
my.df %>%
slice(11:15) %>%
adply(1, function(x) (x$a - x$b)/x$c * 1:5)
在stackoverflow上有关于此的很多示例,可以通过搜索找到