R从数据框中选择:按重复因素的日期

R从数据框中选择:按重复因素的日期,r,dplyr,R,Dplyr,我有一个地址和销售日期的数据框。某些地址有多个条目。我想要一个新的数据帧,每个地址只有一次,并在最近的日期选择该地址。下面是数据框的一个片段 df <-structure(list(address = c("2", "316", "647", "6904", "# 5 BENT TREE DR", "# 62 62000 E 440 PL", "# 7 BENT TREE DR", "#1 ARROWHEAD RD", "#1 ECHO DR", "#1 JACKS HIDEAWAY",

我有一个地址和销售日期的数据框。某些地址有多个条目。我想要一个新的数据帧,每个地址只有一次,并在最近的日期选择该地址。下面是数据框的一个片段

df <-structure(list(address = c("2", "316", "647", "6904", "# 5 BENT TREE DR", "# 62 62000 E 440 PL", "# 7 BENT TREE DR", "#1 ARROWHEAD RD", "#1 ECHO DR", "#1 JACKS HIDEAWAY", "#1 JACKS HIDEAWAY", "#1 MARINA DR", "#1 WHITE CHAPEL", "#10 JACKS HIDEAWAY", "#10 PRIVATEER", "#10 SUMMERSIDE", "#102 THE MOORS", "#103 MOORS VIEW", "#108 THE MOORS", "#111 THE MOORS", "#112 THE MOORS", "#116 THE MOORS", "#12 DOGWOOD HOLLOW", "#12 MAINSTAY", "#120 THE MOORS", "#13 DOGWOOD HOLLOW", "#13 MEGHAN COVES", "#14 BEACON HILL", "#14 GRAND JEST", "#14 GRAND JEST"), sold = structure(c(13521, 11373, 13413, 14372, 15044, 14056, 15044, 12712, 12671, 12524, 11071, 11856, 11670, 11754, 12251, 11829, 11465, 12600, 11271, 11624, 11831, 11276, 12724, 14040, 11100, 12678, 12174, 12293, 14546, 11430), class = "Date")), .Names = c("address", "sold"), class = "data.frame", row.names = c(NA, 30L))
df
我只想在新的数据框中显示123 Main St的2005年日期行

我从
dplyr

library(plyr)
library(dplyr)

> df %>% group_by(address) %>% max(df$sold)
Error in FUN(X[[i]], ...) : 
  only defined on a data frame with all numeric variables
> df %>% group_by(address) %>% max(as.numeric(.(sold)))
Error in function_list[[k]](value) : 
  (list) object cannot be coerced to type 'double'

> ddply(df, .(address), max(.(sold)))
Error in max(.(sold)) : invalid 'type' (list) of argument

我不知道从这里该做什么,如果能帮我想出一种方法来选择一个新的数据帧,我将不胜感激

我们可以
按降序排列
已售出列,并在按“地址”分组后,使用
切片
选择第一个观察值

library(dplyr)
df %>%
    group_by(address)  %>% 
    arrange(desc(sold)) %>%
    slice(1)
library(data.table)
unique(setDT(df)[order(-sold)], by = 'address')

或者获取“已售出”的最大值的索引(
which.sell
),并在按“地址”分组后使用
slice
获取该行

df %>%
   group_by(address)  %>%
   slice(which.max(sold))

或者另一个选项是使用
top\n

df %>%
   group_by(address) %>% 
   top_n(1)

或者,如果我们使用的是
data.table
,我们将'data.frame'转换为'data.table'(
setDT(df)
),按降序排列'sell',并使用
unique
by
选项为每个'address'选择第一个观察值

library(dplyr)
df %>%
    group_by(address)  %>% 
    arrange(desc(sold)) %>%
    slice(1)
library(data.table)
unique(setDT(df)[order(-sold)], by = 'address')

以下是dplyr的另一个选项:

arrange(df, desc(sold)) %>% distinct(address)

这不需要执行
groupby
操作。我们通过降序方式对数据进行排序,如果有多个相同条目,则每个地址只返回第一行。

非常感谢您提供的完整选项列表。这太好了。你的答案是我想象中的解决方案。谢谢