R:如何自动计算一个数据框,然后根据多个数据框的结果生成图表?

R: How to automate calculating a data frame then producing a chart based on the results for multiple data frames?

我如何构建一个动态的“下流管道”来通过 R 推送数据帧以使用这些数据帧自动计算公式?我有一个名为 autocalc 的数据框,它为方程式划出了空白区域。例如,我需要应用这样的等式: autocalc$PPH <- Tokyo$P / Tokyo$PH 。 PPH 已经是 column/vector.

autocalc <- data.frame("INCOME" = c("[=10=] to ,000",",000 to ,999",",000 to ,999",",000 to ,999",",000 to ,999",",000 to ,999","0,000 to 9,999"),
                             "PPH" = c(0,0,0,0,0,0,0),
                             "PTS" = c(0,0,0,0,0,0,0))
    
    autocalc$PPH <- Tokyo$P / Tokyo$PH 
    autocalc$PTS <- autocalc$PPH * .05

此数据框的结果将用于使用 ggplot2 构建图表。

从示例方程可以看出,有一个名为 Tokyo 的数据框。我有三个城市数据框(纽约、巴黎、东京)。每个数据框都有城市的囚犯(向量 P)和人口(向量 PH)。数据进一步按收入组分类。

Tokyo <- data.frame("INCOME" = c("[=11=] to ,000",",000 to ,999",",000 to ,999",",000 to ,999",",000 to ,999",",000 to ,999","0,000 to 9,999"),
                          "P" = c(1844,1062,1036,448,770,364,395),
                          "PH" = c(84900,721007,80800,380004,675000,32900,39500))

我想将每个城市应用于 autocalc 数据框并生成三个单独的图表。我可以 copy/paste 每个城市的三个版本的 autocalc,但这似乎是错误的代码,因为如果我必须在 autocalc 中修复某些东西,我必须为每个城市重做代码。

我查看了以下线索,但我觉得这不应该是一个复杂的问题:

  1. 使用 objective 面向 R6 库的编程。创建一个 autocalc class 并将副本应用到三个城市?适合初学者的 R6 教程不多,所以我觉得有更简单的方法吗?

  2. 使用lapply()。我找到了一个生成类似内容的教程(基于三个单独的数据框的三个单独的图表),但它无法解释如何将 autocalc$PPH <- Tokyo$P / Tokyo$PH 交换为 autocalc$PPH <- Paris$P / Paris$PH 。并保存autocalc对每个城市的计算,准备三张图表。我是否应该摆脱 autocalc 数据框并向每个城市的数据框添加行?

  3. 我的朋友不太精通 R,但他是一名程序员,建议研究一下收集方法。编写脚本并使用方法进行重复操作。但是,我找不到与 R 相关的教程。我想这需要我使用 R6 库进行面向对象编程吗?我在想也许我的任务更适合 Python 呢?有人告诉我 R 更适合分析,而不是构建像这样动态的东西。

我认为选项 2 最简单 straight-forward。您可以将 3 个数据帧放在一个列表中并使用 lapply。您可以在 lapply 中传递一个匿名函数来引用函数内的每个城市数据框。

list_dfs <- list(Tokyo, Paris, NewYork)

list_plots <- lapply(list_dfs, function(x) {
  autocalc$PPH <- x$P / x$PH 
  autocalc$PTS <- autocalc$PPH * .05
  #ggplot2  code here
})

lapply 中输入 ggplot2 代码后,它将为每个城市生成一个包含 3 个地块的列表,您可以通过 list_plots[[1]]list_plots[[2]] 访问这些地块和 list_plots[[3]].