标准plyr表示法中的匹配函数

标准plyr表示法中的匹配函数,r,plyr,R,Plyr,这应该很简单,但是尝试在ddply参数中插入任何类型的match[]语法都会返回错误。。如果可能的话,我正在寻找一种在标准plyr函数中实现的方法 我所要做的就是总结一个数据框,然后对于其中一个我们找到给定值的项目,将其与数据框中另一个项目的对应值进行匹配 这是在这里完成的:,但语法变得混乱 下面是一个例子: data <- data.frame( spend = sample(50:100,50,replace=T), trials = sample(100:200,5

这应该很简单,但是尝试在ddply参数中插入任何类型的match[]语法都会返回错误。。如果可能的话,我正在寻找一种在标准plyr函数中实现的方法

我所要做的就是总结一个数据框,然后对于其中一个我们找到给定值的项目,将其与数据框中另一个项目的对应值进行匹配

这是在这里完成的:,但语法变得混乱

下面是一个例子:

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

数据您可以使用
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(expense)
的情况。此外,
summary
后面的参数顺序也很重要


好吧,那结果不是我所期望的!在任何情况下,我都会使用
dplyr
(巴蒂斯特的答案)或
数据

d <- data.table(data)

d[, .SD[spend==max(spend)], by=country]   

d您可以使用
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(expense)
的情况。此外,
summary
后面的参数顺序也很重要


好吧,那结果不是我所期望的!在任何情况下,我都会使用
dplyr
(巴蒂斯特的答案)或
数据

d <- data.table(data)

d[, .SD[spend==max(spend)], by=country]   

d向包装中添加一个字母

library(dplyr)
chain(data, 
      group_by(country),
      filter(spend == max(spend)))

在包裹中添加一封信

library(dplyr)
chain(data, 
      group_by(country),
      filter(spend == max(spend)))

嗯,贾斯汀,我运行了这个,但它不匹配。我只是看到了试用期=第一个“试用期”数字,而不是一个与国内消费最高值相匹配的数字。这是一个非常讨厌的错误!结果似乎取决于
summary
之后表达式的顺序。试着把这两条线倒过来,它会起作用的@巴蒂斯特哇。。。请再说一遍。并据此编辑了我的答案。这不是一个bug,而是在多个地方重复使用同一个变量名。嗯,贾斯汀,我运行了这个,但它不匹配。我只是看到了试用期=第一个“试用期”数字,而不是一个与国内消费最高值相匹配的数字。这是一个非常讨厌的错误!结果似乎取决于
summary
之后表达式的顺序。试着把这两条线倒过来,它会起作用的@巴蒂斯特哇。。。请再说一遍。并据此编辑了我的答案。这不是一个bug,而是在多个地方重复使用同一个变量名。这太棒了。我是dplyr的新手。。。filter参数是如何把花费和它对应的试验次数都拉进来的?我只能猜测——这是我第一次使用filter参数dplyr@MarcTulla这是筛选(分组依据(数据,国家),支出==max(支出))的快捷方式。
filter()
保留所有现有列。@hadley感谢您的跟进!我想我仍然感到困惑:使用filter()来保留现有列——默认情况下,该函数是否会将匹配值拉入max(expense)?@MarcTulla
speed==max(expense)
计算为每个组的逻辑向量
filter()
保持所有行都对应于true这太棒了。我是dplyr的新手。。。filter参数是如何把花费和它对应的试验次数都拉进来的?我只能猜测——这是我第一次使用filter参数dplyr@MarcTulla这是筛选(分组依据(数据,国家),支出==max(支出))的快捷方式。
filter()
保留所有现有列。@hadley感谢您的跟进!我想我仍然感到困惑:使用filter()来保留现有列——默认情况下,该函数是否会将匹配值拉入max(expense)?@MarcTulla
speed==max(expense)
计算为每个组的逻辑向量
filter()
保留所有与True对应的行