选择基数R中因子的最大值

时间:2015-07-06 10:05:13

标签: r

我试图找出钻石数据集中每个克拉因子水平的最高价格:

diamonds[,'carat']<-factor(diamonds[,'carat'])
df<-with(diamonds, tapply(diamonds$price, diamonds$carat, max))

输出是仅两列的数据框。我希望我的df包含数据集中的所有其他列。另外,我希望该表保留列的名称。现在df中的两行是'行名'和'x'。感谢。

1 个答案:

答案 0 :(得分:6)

如果您需要在现有数据集中创建新列

,可以尝试ave
library(ggplot2)
data(diamonds)
diamonds$Max <- with(diamonds,ave(price, carat,FUN= max))

或者,如果您需要每个'carat'组的max值为'price'的行

library(dplyr)
res1 <- diamonds %>% 
             group_by(carat) %>%
             slice(which.max(price)) 

或者

library(data.table)
res2 <- as.data.table(diamonds)[,.SD[which.max(price)] , carat]

或者

library(sqldf)
nm1 <- setdiff(names(diamonds), 'price')
nm1[6] <- paste0("[",(nm1[6]),"]")
res3 <- sqldf(sprintf('select %s,
                       max(price) as price
                       from diamonds
                       group by carat',
                       toString(nm1)))

或使用base R

res4 <- do.call(rbind,lapply(split(diamonds, diamonds$carat), 
                  function(x) x[which.max(x$price),]))

如果我们需要所有max值而不是which.max,我们可以在上面的解决方案中使用Price==max(Price)。此外,基于ave的解决方案将是

res5 <- diamonds[with(diamonds, ave(price, carat, FUN=max)==price),]