我正在尝试找出钻石数据集中每个克拉因子水平的最高价格:
diamonds[,'carat']<-factor(diamonds[,'carat'])
df<-with(diamonds, tapply(diamonds$price, diamonds$carat, max))
输出是只有两列的数据帧。我希望我的df包含数据集中的所有其他列。另外,我希望表保留列的名称。现在df中的两行是“行名”和“ x”。谢谢。
您可以尝试ave
是否需要在现有数据集中创建一个新列
library(ggplot2)
data(diamonds)
diamonds$Max <- with(diamonds,ave(price, carat,FUN= max))
或者,如果您需要max
每个“克拉”组的行具有“价格”值的行
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),]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句