标准plyr表示法中的匹配函数
这应该很简单,但是尝试在ddply参数中插入任何类型的match[]语法都会返回错误。。如果可能的话,我正在寻找一种在标准plyr函数中实现的方法 我所要做的就是总结一个数据框,然后对于其中一个我们找到给定值的项目,将其与数据框中另一个项目的对应值进行匹配 这是在这里完成的:,但语法变得混乱 下面是一个例子:标准plyr表示法中的匹配函数,r,plyr,R,Plyr,这应该很简单,但是尝试在ddply参数中插入任何类型的match[]语法都会返回错误。。如果可能的话,我正在寻找一种在标准plyr函数中实现的方法 我所要做的就是总结一个数据框,然后对于其中一个我们找到给定值的项目,将其与数据框中另一个项目的对应值进行匹配 这是在这里完成的:,但语法变得混乱 下面是一个例子: data <- data.frame( spend = sample(50:100,50,replace=T), trials = sample(100:200,5
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)?@MarcTullaspeed==max(expense)
计算为每个组的逻辑向量filter()
保持所有行都对应于true这太棒了。我是dplyr的新手。。。filter参数是如何把花费和它对应的试验次数都拉进来的?我只能猜测——这是我第一次使用filter参数dplyr@MarcTulla这是筛选(分组依据(数据,国家),支出==max(支出))的快捷方式。
filter()
保留所有现有列。@hadley感谢您的跟进!我想我仍然感到困惑:使用filter()来保留现有列——默认情况下,该函数是否会将匹配值拉入max(expense)?@MarcTullaspeed==max(expense)
计算为每个组的逻辑向量filter()
保留所有与True对应的行