使用 R 创建起点-终点矩阵

2023-11-27

我的数据框由个人和他们在某个时间点居住的城市组成。我想每年生成一个出发地-目的地矩阵,记录从一个城市到另一个城市的移动次数。我想知道:

  1. 如何自动生成数据集中每年的出发地-目的地表?
  2. 如何生成相同 5x5 格式的所有表格,5 是我的示例中的城市数量?
  3. 有没有比我下面建议的更有效的代码?我打算在一个非常大的数据集上运行它。

考虑以下示例:

#An example dataframe
id=sample(1:5,50,T)
year=sample(2005:2010,50,T)
city=sample(paste(rep("City",5),1:5,sep=""),50,T)
df=as.data.frame(cbind(id,year,city),stringsAsFactors=F)
df$year=as.numeric(df$year)
df=df[order(df$id,df$year),]
rm(id,year,city)

我最好的尝试

#Creating variables
for(i in 1:length(df$id)){
  df$origin[i]=df$city[i]
  df$destination[i]=df$city[i+1]
  df$move[i]=ifelse(df$orig[i]!=df$dest[i] & df$id[i]==df$id[i+1],1,0) #Checking whether a move has taken place and whether its the same person
  df$year_move[i]=ceiling((df$year[i]+df$year[i+1])/2) #I consider that the person has moved exactly between the two dates at which its location was recorded
}
df=df[df$move!=0,c("origin","destination","year_move")]    

创建 2007 年的出发地-目的地表

yr07=df[df$year_move==2007,]
table(yr07$origin,yr07$destination)

Result

        City1 City2 City3 City5
  City1     0     0     1     2
  City2     2     0     0     0
  City5     1     1     0     0

您可以按 id 拆分数据,对特定于 id 的数据框执行必要的计算以获取该人的所有动作,然后重新组合:

spl <- split(df, df$id)
move.spl <- lapply(spl, function(x) {
  ret <- data.frame(from=head(x$city, -1), to=tail(x$city, -1),
                    year=ceiling((head(x$year, -1)+tail(x$year, -1))/2),
                    stringsAsFactors=FALSE)
  ret[ret$from != ret$to,]
})
(moves <- do.call(rbind, move.spl))
#       from    to year
# 1.1  City4 City2 2007
# 1.2  City2 City1 2008
# 1.3  City1 City5 2009
# 1.4  City5 City4 2009
# 1.5  City4 City2 2009
# ...

因为此代码对每个 id 使用矢量化计算,所以它应该比在提供的代码中循环遍历数据帧的每一行要快得多。

现在您可以使用以下命令获取特定于年份的 5x5 移动矩阵split and table:

moves$from <- factor(moves$from)
moves$to <- factor(moves$to)
lapply(split(moves, moves$year), function(x) table(x$from, x$to))
# $`2005`
#        
#         City1 City2 City3 City4 City5
#   City1     0     0     0     0     1
#   City2     0     0     0     0     0
#   City3     0     0     0     0     0
#   City4     0     0     0     0     0
#   City5     0     0     1     0     0
# 
# $`2006`
#        
#         City1 City2 City3 City4 City5
#   City1     0     0     0     1     0
#   City2     0     0     0     0     0
#   City3     1     0     0     1     0
#   City4     0     0     0     0     0
#   City5     2     0     0     0     0
# ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 R 创建起点-终点矩阵 的相关文章

  • R data.table fwrite 到 fread 空间分隔符并清空

    我在使用 fread 以 作为分隔符和散布的空白值时遇到问题 例如 这个 dt lt data table 1 5 1 5 1 5 make a simple table dt 3 V2 NA add a blank in the midd
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p
  • rvest 和 NHL 统计数据的 CSS 选择器问题

    我想从 hockey reference com 中抓取数据 特别是从以下链接中抓取数据 https www hockey reference com leagues NHL 1991 html https www hockey refer
  • 如何确定 R 包的作者?

    如何确定包的作者是谁 鉴于我们拥有这个广泛使用的代码库 我认为参考我在分析中使用的软件是合适的 有没有办法以编程方式检索作者和任何其他相关信息 在伪代码中 我想执行以下操作 references base 我怎样才能做到这一点 为了能够引用
  • R 中的龙卷风图

    我正在尝试在 R 中绘制龙卷风图 又名敏感性图 目标是可视化某些变量增加 10 和减少 10 的效果 到目前为止我已经得到这个结果 这是我正在使用的代码 Tornado plot data lt matrix c 0 02 0 02 0 0
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • R中整数类和数字类有什么区别

    我想先说我是一个绝对的编程初学者 所以请原谅这个问题是多么基本 我试图更好地理解 R 中的 原子 类 也许这适用于一般编程中的类 我理解字符 逻辑和复杂数据类之间的区别 但我正在努力寻找数字类和整数类之间的根本区别 假设我有一个简单的向量x
  • 更快的 %in% 运算符

    The 快速匹配 https cran r project org web packages fastmatch index html包实现了更快的版本match对于重复匹配 例如在循环中 set seed 1 library fastma
  • 如何定义“f_n-chi-square”函数并使用“uniroot”求置信区间?

    I want to get a 95 confidence interval for the following question 我已经写了函数f n在我的 R 代码中 我首先使用 Normal 随机采样 100 个样本 然后定义函数h
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 当有很多列时,使用 readr::read_csv() 导入数据时覆盖列类型

    我正在尝试使用 R 中的 readr read csv 读取 csv 文件 我导入的 csv 文件大约有 150 列 我只包含示例的前几列 我希望将第二列从默认类型 我执行 read csv 时为日期 覆盖为字符或其他日期格式 GIS Jo
  • 使用大矩阵操作

    我必须使用 big matrix 对象 并且无法计算某些函数 让我们考虑以下大矩阵 create big matrix object x lt as big matrix matrix sample 1 10 20 replace TRUE
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • 无法更新/编辑从 R 中的包(`gratia`)导出的 ggplot2 对象

    我希望我在这里遗漏了一些令人痛苦的明显的东西 我希望更新 例如 修复标题 实验室等 由 生成的 ggplot 对象gratia draw 不太确定为什么我无法更新该对象 有一个简单的解决方案吗 devtools install github
  • rpart“as.character(x) 中的错误:无法强制类型 'builtin' 为类型 'character' 的向量”消息是什么意思?

    我一直在用头撞rpart几天了 尝试为我拥有的这个数据集制作分类树 我认为现在是时候询问生命线了 我确信这是我没有看到的愚蠢的事情 但这里是我一直在做什么 EuropeWater lt read csv file paste Users a
  • 如何在 Caret 中绘制随机森林(护林员)树

    我生成了如下所示的随机森林树 并尝试绘制它 但出现错误 我在哪里犯了错误 我怎样才能以正确的方式绘制它 Actmodel lt train Activity Section Author data CB1 method ranger trC
  • R、Rcpp 与 Armadillo 中矩阵 rowSums() 与 colSums() 的效率

    背景 来自 R 编程 我正在扩展到 C C 形式的编译代码Rcpp 作为循环交换 以及一般的 C C 效果的实践练习 我实现了 R 的等效项rowSums and colSums 矩阵的函数Rcpp 我知道它们以 Rcpp 糖的形式存在 并
  • 在R中循环子文件夹

    我正在 R 环境中包含多个子文件夹的文件夹中工作 我想要循环遍历多个子文件夹 然后在每个子文件夹中调用 R 脚本来执行 我想出了下面的代码 但我的代码似乎添加了 到子文件夹列表 我收到错误 文件中的错误 文件名 r 编码 编码 无效的 描述
  • 如何按时间间隔匹配数据帧?

    这是我从数据记录器导入原始数据时经常出现的问题 温度记录仪设置为每十分钟记录一次温度 单独的气体记录仪设置为记录最后十分钟间隔内使用的气体 我想将这两个记录器的数据合并到一个数据框中进行绘图和分析 但时间并不完全一致 我希望每十分钟的时间段
  • 绘制 Cox 回归的 Kaplan-Meier 图

    我使用 R 中的以下代码设置了一个 Cox 比例风险模型来预测死亡率 添加协变量 A B 和 C 只是为了避免混淆 即年龄 性别 种族 但我们真正对预测变量 X 感兴趣 X 是一个连续变量 cox model lt coxph Surv t

随机推荐

  • 安装 ASP.NET 和 Web Tools 2015 后,Visual Studio 出现错误“对象引用未设置为对象的实例”

    安装 ASP NET 和 Web Tools 2015 RC1 更新 1 后 打开 ASP NET MVC 4 项目时出现以下错误 cshtml files 未将对象引用设置为对象的实例 即使我启动一个新的 ASP NET MVC 4 项目
  • Eclipse 中的 Egit 导入显示运行时错误

    我尝试制作一个非常简单的 hello world 在 Eclipse 中使用 Egit 导入 我没有发现任何证据表明该软件无法正常工作 在谷歌中没有发现错误 所以看起来我犯了一些我不知道的错误 我按照此处定义的步骤进行操作 http cra
  • 如何对字典中的所有值求和?

    假设我有一个字典 其中的键映射到整数 例如 d key1 1 key2 14 key3 47 是否有一种语法上简约的方法来返回值的总和d i e 62在这种情况下 正如您所期望的 sum d values
  • 将 UUID 与 LINQ to Entities 中的字符串进行比较会引发错误 [重复]

    这个问题在这里已经有答案了 编辑 这不是重复的 建议的 SO 链接希望我打电话ToString 但我正在运行 COUNT 并试图做一个比比较更大的事情ToString 不是正确答案 我正在尝试使用以下方式填充变量IF快捷方式 但当我运行它时
  • SSRS:根据参数值有条件隐藏列 - CSV 导出忽略

    我在 SSRS 2008 中有一个简单的基于表格的报告 有 10 列 每列都有一个相应的参数来确定是否应显示该列 我通过设置在设计模式下右键单击列标题时获得的 列可见性 选项来实现此目的 就我而言 我选择 根据表达式显示或隐藏 将表达式设置
  • Pod Init 没有创建 xcworkspace?

    我启动了一台新 Mac 运行 sudo gem install cocoapods 完成 Pod 初始化 Pod 文件已创建 但没有 xcworkspace 文件 使用 Xcode 9 3 任何帮助表示赞赏 尝试过 卸载 cocoapods
  • 使用 R 中的工具提示绘制县级数据

    我在 www betydb org 上看到了美国县级的交互式分区统计图 我想使用 R 重现类似的地图 我只想要地图和工具提示 不是不同缩放级别的所有图块 或者切换地图的能力 该地图当前创建于ruby 弹出窗口 左下角 查询 MySQL 数据
  • 如何自动更新 MS-Access 2007 应用程序

    我有一个与 MySql 服务器通信的前端 Access 2007 应用程序 我想要一个功能 用户计算机上的应用程序可以检测到网络上有新版本 这并不困难 并将最新版本下载到本地驱动器并启动它 有谁有任何知识或经验如何做到这一点 Thanks
  • 如何在xampp中启用curl? [复制]

    这个问题在这里已经有答案了 如何在xampp中启用curl 我的 PHP twitter 应用程序需要curl 函数 但在 XAMPP 中并未启用它 如何启用它 我没有找到这样做的选择 您必须修改 xampp 文件夹中的 php ini 文
  • 如何在 Verilog 中将长语句分成行

    例如 我有一个很长的声明 display input data x output data x result x input data output data result 如何在 Verilog 中将其变成单语句和多行 您需要分解引用的字
  • 启动一个即使在 IE 中也能正常运行的文件下载?

    我正在寻找有关从 Javascript 启动文件下载的最佳方法的更多想法 启动下载的最佳方式 有很多好的想法 可以总结一下 在 iframe 上设置 src 使用 window location replace 使用带有元刷新标题的页面 使
  • Codeigniter URL 在没有 index.php 的情况下无法工作

    我刚刚建立了一个新网站http www reviewongadgets com 但是URL渲染有问题 当我输入如下 URL 时 它不起作用并给出页面未找到错误http www reviewongadgets com latest mobil
  • C 结构体成员的默认值

    是否可以为某些结构成员设置默认值 我尝试了以下方法 但是会导致语法错误 typedef struct int flag 3 MyStruct Errors gcc o testIt test c test c 7 error expecte
  • 在seaborn中使用Unicode文本

    我想在 Seaborn 中使用 Unicode 文本 Python 2 7 我可以使用 Unicode 文本作为 matplotlib 的图块 例如 import matplotlib pyplot as plt from matplotl
  • 告诉 Puppeteer 打开 Chrome 选项卡而不是窗口

    如果我打开了现有的 Google Chrome 窗口 我想告诉 puppeteer 打开一个新选项卡而不是打开一个新窗口 有没有办法做到这一点 是否有一些选项或标志我可以传递给木偶师来完成此任务 I have const puppeteer
  • 标准表单身份验证 Java servlet

    使用 Java Servlet 进行表单身份验证的标准方法是什么 从现在开始 我自己使用简单的 POST HTML 表单实现了这一点 根据数据库检查发送的参数 如果存在 将 User 对象保存到 HttpSession 中 检查每个 Ser
  • 解析 ANTLR 中的字符串插值

    我正在开发一个用于内部目的的简单字符串操作 DSL 并且我希望该语言能够支持 Ruby 中使用的字符串插值 例如 name Bob msg Hello name print msg prints Hello Bob 我正在尝试在 ANTLR
  • 证明在循环中使用范围运算符不会使用额外的内存

    当前的文档范围运算符 声明它不会消耗内存计数循环 范围运算符对于编写很有用foreach 1 10 循环以及对数组进行切片操作 在当前的实现中 没有创建临时数组当范围运算符用作 foreach 循环中的表达式时 但是当您编写如下内容时 旧版
  • WPF 将 StackPanel 的宽度从 0 动画到自动?

    我正在尝试在 StackPanel 的可见性从宽度 0 变为自动宽度时对其进行动画处理 这是我目前所拥有的
  • 使用 R 创建起点-终点矩阵

    我的数据框由个人和他们在某个时间点居住的城市组成 我想每年生成一个出发地 目的地矩阵 记录从一个城市到另一个城市的移动次数 我想知道 如何自动生成数据集中每年的出发地 目的地表 如何生成相同 5x5 格式的所有表格 5 是我的示例中的城市数