1

我一直在查看帮助页面tapply并且by我不确定它们是否是正确的工具。例如,如果我有一个列所在的数据框,Name,Value1,Value2并且我想应用一个函数,请说function f(x,y) { do_something }并分组,Value1然后得到一个包含列的数据框,我应该怎么做?Value2NameName,f(Value1,Value2)

我可以让 tapply 在这样的简单案例中工作:

tapply(df$Name, df$value1, mean)

但是如果我的函数df$value2也作为输入呢?并没有那么简单mean?换句话说,我正在尝试做的伪符号是:

tapply(df$Name, c(df$value1,df$value2), function f(x,y) { x+y+bla...})

4

2 回答 2

4

by将完成这项工作,尽管它不会返回data.frame.

by(df, df$Name, function(X) f(X$Value1, X$Value2))

该软件包data.table更适合此类事情:

install.packages("data.table")
library(data.table)
dt = data.table(df)
dt[,f(Value1, Value2),by=Name]

将准确返回您正在寻找的内容。

于 2013-09-17T21:32:25.707 回答
3

也检查出来plyr。例如

require(plyr)
ddply(mtcars, .variables="cyl", .fun=mutate,
      meaningless_number = mean(mpg) + disp)

会给你一个数据框,就像添加的mtcarsmeaningless_number是平均值加上个人。用于添加列、查看摘要以及用于其他目的的其他功能。mpgcyldisp.fun = mutate.fun = summarize

这个问题的答案非常适合一般*应用知识。我还发现这个答案是一个很棒的plyr教程。

于 2013-09-17T21:38:16.947 回答