R - 最大值

时间:2015-02-24 22:15:19

标签: r

嘿我刚刚开始学习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)

谢谢:)

2 个答案:

答案 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的建议