嘿我刚刚开始学习R.我想问一下如何在数据框中基于2个向量的组合找到矢量中的最大值。 例如,我想找到五个最高平均价格。 我有一个大约7列的数据框,其中3列是平均价格,城市和年份。这一年显然是经常性的,范围从2000年到2009年。数据在不同的列和行中也有不同的NA。
The Data Frame looks something like this:
avgprice year city
12 2000 Jersey City
45 2001 Hoboken
NA 2000 Hoboken
34 2000 evanston
67 2001 abilene
89 2001 elizabeth
45 2000 delhi
98 2000 delhi
I want the answer to look like
year city avgprice
2000 jersey city 12
2000 evanston 34
2000 delhi 98
2001 hoboken 45
2001 elizabeth 89
2001 abilene 67
我尝试使用以下代码,但我认为我搞砸了一些东西。我尝试使用split by year创建df,然后使用聚合函数。
df<-split(tx.house.sales, tx.house.sales$year)
re<-aggregate(avgprice~city, df, FUN=max)
谢谢:)
答案 0 :(得分:3)
以下是一些简单的选项(假设df
是原始数据(未拆分))。 aggregate
顺利运作的原因是因为默认情况下na.action = na.omit
符合您的确切需求。
aggregate(avgprice ~ city + year, df, max)
# city year avgprice
# 1 delhi 2000 98
# 2 evanston 2000 34
# 3 Jersey City 2000 12
# 4 abilene 2001 67
# 5 elizabeth 2001 89
# 6 Hoboken 2001 45
或者
library(data.table)
setDT(na.omit(df))[, .(avgprice = max(avgprice)), keyby = .(year, city)]
或者
library(dplyr)
na.omit(df) %>%
group_by(city, year) %>%
summarise(avgprice = max(avgprice))
答案 1 :(得分:1)
使用dplyr
即可:
library(dplyr)
df %>% group_by(city,year) %>% slice(which.max(avgprice))
# avgprice year city
#1 67 2001 abilene
#2 98 2000 delhi
#3 89 2001 elizabeth
#4 34 2000 evanston
#5 45 2001 Hoboken
#6 12 2000 JerseyCity
更新了以下@docendo discimus的建议