这应该是直截了当的,但是尝试在ddply参数中插入任何类型的match []语法会返回错误。我正在寻找一种在标准plyr函数中执行此操作的方法,如果可能的话。
我想要做的就是总结一个数据框,然后对于我们找到给定值的项目之一,将其与数据框中另一个项目的相应值相匹配。
这里完成了:Summarise in ddply,但语法变得混乱。
以下是一个例子:
data <- data.frame(
spend = sample(50:100,50,replace=T),
trials = sample(100:200,50,replace=T),
country = sample(c("usa","canada","uk"),50,replace = T)
)
我希望按国家/地区汇总并获取“支出”的最大值。无论那个价值是多少,我都希望为“试验”提供相应的价值。
data2 <- ddply(data, .(country), summarise,
spend = max(spend),
....
我可以在“汇总”中执行此操作,还是必须使用自定义函数(df)参数?
答案 0 :(得分:2)
您可以使用which.max
:
ddply(data,
.(country),
summarise,
trials=trials[which.max(spend)],
spend=max(spend))
或者更明确地说,如果你正在做一些复杂的事情:
ddply(data,
.(country),
summarise,
trials=head(trials[spend == max(spend)], 1),
spend=max(spend))
head(...)
来电,以防有两行max(spend)
。此外,summarise
后面的参数顺序很重要......
那么,结果不是我的预期!在任何情况下,我都会使用dplyr
(baptiste的答案)或data.table
:
d <- data.table(data)
d[, .SD[spend==max(spend)], by=country]
答案 1 :(得分:2)
在包中添加一个字母,
library(dplyr)
chain(data,
group_by(country),
filter(spend == max(spend)))