我想在我的数据帧中的一组变量(不是全部!)之间创建一个散点图矩阵。
我的dataFrame的快照:
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至V7 和 R1-R2 。所以我想要实现的是 V1-R1 , V1-R2 , V2-R1 之间的情节...... V7-R2 。我不想绘制 V1-V2 , V1-V4 等。
我认为一种简单的方法就是将我的数据框分成两部分,这样我就能实现目标。
所以我将数据框分成两部分,如下所示:
dataFrame1<-dataframe[,1:7]
dataFrame2<-dataframe[,8:9]
就从R中获取相关表而言,这很有效:
cor(dataFrame1,dataFrame2)
到目前为止,我已尝试 ggpairs , car 和 scatterplotMatrix ,但这些似乎都无法正常工作。
对于使用当前代码的ggpairs:
ggpairs (dataFrame1, dataFrame2)
我收到以下错误消息
确保您的“列”值为正。
当然,上面的dataFrame只是整个数据集的一个示例,因此您无法在R1和R2中看到任何底片。
我不想在ggplot2中手动执行,然后使用glob合并到单个图中。此外,我不想为所有变量绘制矩阵,因为这不是我想要实现的。
还有另一种方法可以达到我追求的目标吗?
感谢。
答案 0 :(得分:1)
这是一个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)
,它会将每个变量与其他变量相对应。