R 带有列和行的分面 qqplots

2024-05-31

我需要使用按行和列的构面创建 qqplot。我了解如何用列和行绘制分面图,但我不确定如何设置我的数据。最终,我想按列和行对数据集进行分组,然后按升序对“建模”结果和“观察到”结果进行排序,同时添加带有“行”组的列和带有“列”组的列。

我一直在尝试修改这个问题的解决方案,使用 ggplot2 进行分面 qqplots https://stackoverflow.com/questions/12369377/faceted-qqplots-with-ggplot2,,但我对 lapply 不太熟悉,所以也许我错过了一些东西。

这是我一直在使用的代码:

#Dummy Data:
df <- mtcars
# Name columns as I have in my real data
df$rows <- df$cyl
df$columns <- df$gear
df$Modeled <- df$wt
df$Observed <- df$mpg

# Function to sort data while maintaining the rows & columns for use in facet later.
dat_sort <- do.call("rbind", 
                  sapply(list(unique(df$rows), unique(df$columns)), 
                         FUN = function(x) {
                           data.frame(rows = x[[1]], 
                                      columns = x[[2]], 
                                      Observed = sort(df$Observed[df$rows == x[[1]] & df$columns == x[[2]]]), 
                                      Modeled = sort(df$Modeled[df$rows == x[[1]] & df$columns == x[[2]]])
                                      )
                           }
                         ))

我没有收到错误,但我的输出绝对不是我所期望的。我的输出应如下所示:(具有正确的列名称)

rows columns Observed Modeled
6      4      17.8      2.620
6      4      19.2      2.875
6      4      21.0      3.440
6      4      21.0      3.440
4      3      21.5      2.465
8      5      15.0      3.17
8      5      15.8      3.57   

代码输出:

       [,1]   [,2]   [,3]   [,4]
[1,]  6.000  6.000  6.000  6.000
[2,]  4.000  4.000  4.000  4.000
[3,] 17.800 19.200 21.000 21.000
[4,]  2.620  2.875  3.440  3.440
[5,]  4.000  4.000  4.000  4.000
[6,]  3.000  3.000  3.000  3.000
[7,] 21.500 21.500 21.500 21.500
[8,]  2.465  2.465  2.465  2.465

非常感激任何的帮助!

Thanks!


我们只需要order数据集按升序排列,可以通过以下方式完成order

df1 <- df[c('rows', 'columns', 'Observed', 'Modeled')]
df2 <- df1[do.call(order, -df1),]

在OP的代码中,更改sapply to lapply返回为list (sapply默认情况下使用simplify = TRUE返回一个matrix)

do.call(rbind, lapply(list(unique(df$rows),
        unique(df$columns)), 
            FUN = function(x) {
               data.frame(rows = x[[1]], 
                          columns = x[[2]], 
                          Observed = sort(df$Observed[df$rows == x[[1]] & 
                                   df$columns == x[[2]]]), 

                          Modeled = sort(df$Modeled[df$rows == x[[1]] &
                                     df$columns == x[[2]]])
                                                               )
                                                    }
                                                  ))
#   rows columns Observed Modeled
#1    6       4     17.8   2.620
#2    6       4     19.2   2.875
#3    6       4     21.0   3.440
#4    6       4     21.0   3.440
#5    4       3     21.5   2.465

通过循环unique as a list,每个向量都是一个单独的list元素和x[[1]], x[[2]]实际上是基于第二个元素的 6, 4 和 4, 3 进行子集化

list(unique(df$rows), unique(df$columns))
#[[1]]
#[1] 6 4 8

#[[2]]
#[1] 4 3 5

相反,如果我们需要对相应的元素执行此操作,则使用Map或循环序列unique元素(假设它们具有相同的长度),但更简单的方法是split

如果长度相同unique元素,并且想要根据相应的值进行子集,然后使用Map

do.call(rbind, Map(function(x, y) {
    i1 <- df$rows == x & df$columns == y
    data.frame(rows = x, columns = y,
               Observed = sort(df$Observed[i1]),
               Modeled = sort(df$Modeled[i1]))},
    unique(df$rows), unique(df$columns)))
#  rows columns Observed Modeled
#1    6       4     17.8   2.620
#2    6       4     19.2   2.875
#3    6       4     21.0   3.440
#4    6       4     21.0   3.440
#5    4       3     21.5   2.465
#6    8       5     15.0   3.170
#7    8       5     15.8   3.570
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 带有列和行的分面 qqplots 的相关文章

  • R/ggplot2:如何匹配重叠区域图中的图例和绘图颜色?

    我有两个面积图 称为 蓝色 和 绿色 其中green大部分是在blue情节 但在极少数点上 它高于blue阴谋 我想使用透明度说alpha 0 2对于两者 并且还能够为每个指定颜色 我现在的问题是 自从green情节主要是在blue地块 其
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • 双精度数据类型和数值数据类型之间的区别

    R编程中双精度数据类型和数值数据类型有什么区别 From stat ethz ch https stat ethz ch R manual R devel library base html double htm R 的浮点向量有两个名称
  • 随着数据帧变大,如何防止 rbind() 变得非常慢?

    我有一个只有 1 行的数据框 为此 我开始使用 rbind 添加行 df mydataframe with only one row for i in 1 20000 df lt rbind df newrow 随着我的成长 这变得非常缓慢
  • 以对数刻度绘制较长的 y 轴刻度,刻度向外

    我之前有一篇关于在特定 y 轴值处绘制较长刻度的文章 在特定 y 轴值处绘制较长的刻度 https stackoverflow com questions 51335424 plotting longer ticks at particul
  • 如何重新格式化数据并映射它?

    假设我有数据 其中列名称是城市 行名称是经度和纬度 Columbus Nashville Austin Washington D C London Manchester lon 82 99879 86 7816 97 74306 77 03
  • 从 r 中的数据帧中删除每第 n 列

    我试图通过删除每第三列来减小数据框的大小 这是我的示例数据框 example data frame x c 1 2 3 4 y c 1 2 3 4 z c 1 2 3 4 w c 1 2 3 4 p c 1 2 3 4 q c 1 2 3
  • 如何在 dbplyr 中使用自定义 SQL 函数?

    我想计算数据库中的 Jaro Winkler 字符串距离 如果我将数据带入 R 使用collect 我可以轻松地使用stringdist函数从stringdist包裹 但我的数据非常大 我想过滤 Jaro Winkler 距离before将
  • R 中二维核密度估计的混乱

    核密度估计器用于估计特定的概率密度函数 参见mvstat net http www mvstat net tduong research seminars seminar 2001 05 and scikit learn 文档 http s
  • 使用 cmd 和 R 配置 databricks

    我正在尝试使用 databricks cli 并调用 databricks 配置 这就是我从 cmd 执行此操作的方法 somepath gt databricks configure token Databricks Host shoul
  • dplyr 通过评估查找单元格值来改变特定列

    我已经使用定额 符号和求值探索了各种选项 但我似乎无法获得正确的语法 这是一个示例数据框 data frame A letters 1 4 B letters 26 23 C letters c 1 3 5 7 D letters c 2
  • igraph - 将文本添加到社区图

    使用下面的代码 我可以在 igraph 提供的 空手道俱乐部 示例中生成社区图 请参见第一张图片 library igraph karate lt make graph Zachary wc lt cluster walktrap kara
  • 使用 R 并行处理 XML 节点

    我正在尝试与 R 并行处理 XML 文档xml2包装和foreach功能 但我收到 node attrs x node nsMap ns 中的错误 外部指针无效 尝试导出树集群导出 示例代码 library xml2 library for
  • 如何使用 ggplot2 在轴标签中使用上标

    如何在x轴上打印埃平方 我尝试如下 labs x x axis 2 y y axis 我们可以用bquote library ggplot2 ggplot mtcars aes hp mpg geom point labs x bquote
  • 我想将两个变量合并为一个具有日期格式的变量

    我有一个包含几个月的字符列的数据集 MONTH 和指示年份的数字列 YEAR 为了将其用作面板数据 我需要将这些结合起来YEAR and MONTH转换为日期格式的变量 我尝试过改变变量MONTH转换为数字格式 然后合并MONTH与柱YEA
  • 在 R 中调用“boot”时没有数据

    我有一个包含很多列的数据框 第一列包含 系统 1 系统 2 等类别 第二列包含代表 0 和 1 的数字 请看下面 例如 SYSTEM Q1 Q2 S1 0 1 S1 1 0 S2 1 1 S2 0 0 S2 1 1 我在 R 中有这段代码来
  • 在子目录中构建共享库

    我正在尝试构建一个使用一些 C 代码的 R 包 我有一个编译为可执行文件的 C 库 可以从命令行调用 有一个与之关联的 Makefile 我正在尝试获取信息here http cran r project org doc manuals R
  • 通过环境.yml 文件使用 conda 安装 R 包

    通常我会创建 conda 环境 例如 conda env create f environment yml conda activate env name 通常我使用 Python 工作 典型的environment yml简单的文件可能看
  • 在 R 中,将一列值与所有其他列进行比较

    我对 R 非常陌生 我有一个问题对于这里的专家来说可能非常简单 假设我有一个表 sales 其中包含 4 个客户 ID 123 126 和 4 个产品 A B C D ID A B C D 123 0 1 1 0 124 1 1 0 0 1
  • 合并结果的行数多于一个数据框

    我有两个数据框 第一个包含 9994 行 第二个包含 60431 行 我想合并两个数据框 以便合并后的数据框包含两个数据框的组合列 但只包含 9994 行 但是 合并后我得到了超过 9994 行 我怎样才能确保这种情况不会发生 df1 re

随机推荐