在 R 中使用两个数据帧的散点图矩阵

Scatterplot matrix using two dataframes in R

我想在我的数据框中的一组变量(不是全部!)之间创建一个散点图矩阵。

我的数据帧的快速快照:

V1    V2    V3    V4    V5    V6    V7    R1    R2
.08  .05   .93   .1    .21   .32    .21   .09  .07
.43  .12   .1   .40    .07   .98    .25   .10  .05

两组分别是V1到V7R1-R2。所以我想要实现的是 V1-R1V1-R2V2-R1[= 之间的情节63=].......V7-R2.我不想绘制 V1-V2V1-V4

我认为实现此目的的一种简单方法是将我的数据框分成两部分,这将使我能够实现我的目标。

所以我将数据框分成两部分,如下所示:

dataFrame1<-dataframe[,1:7]

dataFrame2<-dataframe[,8:9]

就从 R 中获取相关性 table 而言,这很有效:

cor(dataFrame1,dataFrame2)

但是绘图位有点挑战。

到目前为止,我已经尝试了 ggpairscarscatterplotMatrix 和 none 他们似乎工作。

对于 ggpairs 使用当前代码如下:

ggpairs (dataFrame1, dataFrame2)

我收到以下错误消息

Make sure your 'columns' values are positive.

当然上面的数据帧只是整个数据集的一个样本,因此你在 R1 和 R2 中看不到任何负数。

我不想在 ggplot2 中手动完成,然后使用 glob 合并成一个图。此外,我不想按原样绘制所有变量的矩阵,因为这不是我想要实现的目标。

还有其他方法可以实现我的目标吗?

谢谢。

这是一个 dplyr 解决方案。首先将你原来的 df 子集分成两个不同的data.frames;将它们变成 ggplot 所需的长格式;然后按行合并 data.frames(我为此添加了一个 id 变量)并用 facet_grid.

绘制结果
# Simulating data
df <- data.frame(
  id = 1:100,
  V1 = rnorm(100),
  V2 = rnorm(100),
  V3 = rnorm(100),
  R1 = rnorm(100),
  R2 = rnorm(100),
  R3 = rnorm(100))

library(dplyr)
library(tidyr)

# Subset the data.frames
df1 <- select(df,id,starts_with("V"))
df2 <- select(df,id,starts_with("R"))

# Turn them both to long form and merge them
dft <- gather(df1,var,value,-id) %>% 
  left_join(gather(df2,var,value,-id),by="id")

ggplot(data = dft,aes(x = value.x,y=value.y)) +
  geom_point() +
  facet_grid(var.x~var.y)

附带说明一下,您的代码会产生此错误,因为 ggpairs 不需要两个 data.frames。见 ?GGally::ggpairs :

ggpairs(data, columns = 1:ncol(data) ...)

第二个参数应该是列索引;您正在传递整个 data.frame。 ggpairs 似乎不能做你想做的事,但如果你只是将整个原始数据帧传递给它,它会把每个变量相互绘制:ggpairs(dataframe)