2015-08-15 144 views
0

我想在我的數據框中的一組變量(不是全部!)之間創建一個散點圖矩陣。使用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 ....... V7-R2之間的陰謀。我不想繪製V1-V2V1-V4

我想出一個簡單的方法去這將是我的數據幀一分爲二這將使我實現我的目標。

所以我拆我的數據幀分成兩個如下:

dataFrame1<-dataframe[,1:7]

dataFrame2<-dataframe[,8:9]

以此爲據的作品以及來自R獲取相關表進行關注:

cor(dataFrame1,dataFrame2)

但是繪圖位是一個挑戰。

我迄今試圖ggpairs汽車scatterplotMatrix和他們都不工作。

對於使用當前代碼如下ggpairs:

ggpairs (dataFrame1, dataFrame2) 

我收到以下錯誤消息

確保您的「列」的值都是正數。

當然,上面的dataFrame只是整個數據集的一個樣本,因此在R1和R2中看不到任何負數。

我不想做手工在GGPLOT2然後用水珠合併成一個單一的情節。我也不想爲所有變量繪製矩陣,因爲這不是我想要實現的。

是否有另一種方法可以獲得我所追求的?

謝謝。

+0

完成@scoa。謝謝! – VGu

回答

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) 

enter image description here

在一個側面說明,你的代碼,因爲ggpairs沒有人希望兩個data.frames產生這個錯誤。見?GGally::ggpairs

ggpairs(數據,列= 1:NcoI位(數據)...)

第二個參數應該是列指數;你正在傳遞一個完整的data.frame。 ggpairs似乎無法做到你想要的,但是如果你只是將整個原始數據幀傳遞給它,它會將每個變量映射到每個變量上:ggpairs(dataframe)