You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在dodgr生成的出行时间矩阵中找出1小时可达的MSOA目的地?

获取1小时内可达的MSOA ID/名称解决方案

你可以通过逐行筛选出行时间矩阵中满足条件的列,提取对应的MSOA标识,以下是两种实用方法:

方法一:Base R 实现

假设odtwalk矩阵的列名就是MSOA的ID/名称,或者destination数据框的行顺序与矩阵列顺序一致且包含MSOA标识列(比如msoa_id),可以用apply函数逐行处理:

# 情况1:矩阵列名直接是MSOA ID
LSOA_Bromley$reachable_msoas <- apply(odtwalk <= 3600, 1, function(x) {
  colnames(odtwalk)[x]  # 筛选出行时间<=3600的列名
})

# 情况2:从destination数据框提取MSOA ID(需保证destination行顺序与矩阵列顺序一致)
LSOA_Bromley$reachable_msoas <- apply(odtwalk <= 3600, 1, function(x) {
  destination$msoa_id[x]  # 替换为你的MSOA标识列名
})

执行后,LSOA_Bromley会新增reachable_msoas列,这是一个列表列,每个元素对应一个起点可达的MSOA标识向量。

方法二:Tidyverse 风格实现

如果习惯用dplyr和purrr的tidy语法,也可以这样写:

library(dplyr)
library(purrr)

# 将矩阵转为数据框(保留列名)
odt_df <- as.data.frame(odtwalk)

# 逐行筛选并提取MSOA标识
LSOA_Bromley <- LSOA_Bromley %>%
  mutate(
    reachable_msoas = map(row_number(), ~{
      colnames(odt_df)[odt_df[.x, ] <= 3600]
      # 若需从destination提取,替换为:destination$msoa_id[odt_df[.x, ] <= 3600]
    })
  )

可选:转为字符串格式

如果需要将列表转为逗号分隔的字符串方便查看,可添加以下代码:

LSOA_Bromley$reachable_msoas_str <- sapply(LSOA_Bromley$reachable_msoas, paste, collapse = ", ")

内容的提问来源于stack exchange,提问作者yuyumew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:05:21