获取一列中重复次数最多的项目及其在另一列中的关联值

Get the most repeated items in one column and its associated value in another column

我的原始数据集 (cyclistic_data) 有 3 列:station namestation_latstation_lng。这是我的数据集的预览。
Preview of data set

station_coordinates <- 
   data.frame(
     station = c(Dearborn St, Franklin St, Lake Shore Dr, Dearborn St, 
                 Dearborn St,  Franklin St),
     station_lat = c(-87.6291273333333, -87.6353428333333, 
                     41.8809828333333, -87.6291273333333, 
                    -87.6291273333333, -87.6353428333333),
     station_lng = c(41.8944341666667, 41.900675, 41.8720545, 
                     41.8944341666667, 41.8944341666667, 41.900675) 
   )              

我试过了

sort(table(cyclistic_data$start_station),decreasing=TRUE)[1:100]

获取重复次数最多的 100 个站名的代码。通过使用此代码,我确定了前 100 个站点,但我无法从原始数据中提取相应的 lan 和 lng 值 det.I 想要从原始数据集中检索最重复的 100 个站点名称及其 lat 和 lng 值。

如果没有可重现的例子,很难给出一个精确的解决方案,但如果我理解正确,你可以试试:

  • 使用 add_count() 向您的数据框添加一列,我们将在此处将其命名为“station_n”。
  • slice_max(n = 100, order_by = station_n) 根据我们的统计,这将取前 100 个站点。
data %%>
    add_count(station, name = "station_n")%>%
    slice_max(n = 100, order_by = station_n) 

根据经度和纬度绘图是一个稍微不同的问题,取决于你想如何绘图,但你可以看看 maps() 包和 geom_sf() 作为初学者

根据您的评论,我知道最简单的方法是使用联接。很可能有一个 better/quicker 选项:

#Making a minimally complex example: 
data <- data.frame(station = c("one", "one", "two", "one", "three", "three"),
                     lat = c(18938, 18938, 18273, 18938, 199999, 199999))

top <- data %>%
  count(station, sort = TRUE)%>%
  slice_max(n = 2, order_by = n)

data %>%
  inner_join(top)

我们可以把它变成一个像这样的函数:

keeping_top_n <- function(x, top_n = 100, var_of_interest = station){
  top <- x %>%
    count({{var_of_interest}}, sort = TRUE)%>%
    slice_max(n = top_n, order_by = n)
  
  x %>%
    inner_join(top)
}

#you would call this like:

keeping_top_n(data_frame)