R apply函数 - 使用哪一个?

时间:2016-08-18 05:56:25

标签: r lapply sapply

我很困惑,在这里使用家庭。 我有一个数据框mydf

terms
A
B
C

我想将自定义函数应用于每个值,并在新列中获取结果,如下所示

terms Value1 Value2 ResultChar
A     23     45     Good
B     12     34     Average
C     9      23     Poor

自定义函数类似myfunc("A")返回类似(23, 45, Good)

的向量

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

看起来您需要数据框输出,因为跨列的数据类型不同。因此,您需要定义myfunc以返回数据框。

考虑这个玩具示例:

mydf <- data.frame(terms = letters[1:3], stringsAsFactors = FALSE)
myfunc <- function (u) data.frame(terms = u, one = u, two = paste0(u,u))

以下是使用基本R功能的一种可能性:

do.call(rbind, lapply(mydf$terms, myfunc))
#  terms one two
#1     a   a  aa
#2     b   b  bb
#3     c   c  cc

或者您可以使用adply包中的plyr

library(plyr)
adply(mydf, 1, myfunc)
#  terms terms.1 two
#1     a       a  aa
#2     b       b  bb
#3     c       c  cc

(&gt; _&lt;)这是我第一次尝试使用R base以外的数据帧;不确定为什么adply在这里返回不需要的列名...

答案 1 :(得分:3)

我们可以将rbindlistlapply一起使用。它会更有效率

 library(data.table)
 rbindlist(lapply(mydf$terms, myfunc))

如果需要,我可以显示基准。但是,它们已经显示here

相关问题