标准plyr表示法中的匹配功能

时间:2014-02-05 21:49:32

标签: r plyr

这应该是直截了当的,但是尝试在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)参数?

2 个答案:

答案 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)))