繁体   English   中英

如何将R中的函数应用于由另一列分组的数据帧的某些列?

[英]How do I apply a function in R to certain columns of a data frame grouped by another column?

我一直在寻找的帮助页面tapplyby ,我不知道他们是这样做的正确的工具。 例如,如果我有一个数据框,其中的列为Name,Value1,Value2并且我想应用一个函数,则将function f(x,y) { do_something }应用于按Name分组的Value1Value2并得到一个数据框与列Name,f(Value1,Value2)我应该怎么做?

我可以轻而易举地在这样的简单情况下工作:

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

但是如果我的函数也将df$value2作为输入怎么办? 是不是这么简单mean 换句话说,我想要做的是伪符号:

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

尽管不会返回data.frame但是by可以完成工作。

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]

将完全返回您要查找的内容。

还检查出plyr 例如

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

会给你回一个数据帧就像mtcars ,与添加的列meaningless_number这是平均mpgcyl加上个人disp 使用.fun = mutate添加列,使用.fun = mutate .fun = summarize查看摘要,以及其他用于其他目的的功能。

对于一般的*应用知识, 此问题的答案非常有用。 我还发现此答案是一个很棒的plyr教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM