【问题标题】:Get the most repeated items in one column and its associated value in another column [closed]获取一列中重复次数最多的项目及其在另一列中的关联值[关闭]
【发布时间】:2022-01-02 01:39:25
【问题描述】:

我的原始数据集(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 个站点,但我无法从原始数据 det 中提取相应的 lan 和 lng 值。我想从原始数据集中检索重复次数最多的 100 个站点名称及其 lat 和 lng 值。

【问题讨论】:

标签: r sorting ggplot2 filtering ggmap


【解决方案1】:

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

  • 使用 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() 作为启动器

在您发表评论后,我知道的最简单的方法是使用联接。可能有更好/更快的选择:

#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)

【讨论】:

  • 我需要获取站点列中最常用站点的 100 个名称以及前 100 个列表中每个站点对应的 lat 和 lng 值。
  • Oki,已经编辑了答案 - 对我来说很好,如果您有任何问题,请制作一个可重现的示例 :)
  • 成功了。感谢您的协助。我不得不像这样更改代码以获得所需的结果。顶部 % count(end_station, sort = TRUE)%>% head(arrange(desc(n)), n = 100)
猜你喜欢
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2015-10-05
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多