2016-04-17 4 views
0

I zwei Datenrahmen haben, enthält eine der Gruppen von Individuen, die andere enthält Wert eines Zeichens, wie folgt aus:R plot - Farbe der Einträge in Plots Punkten basierend auf Vorhandensein in anderen Datenrahmen (unter Verwendung von loop)

df1:

individuals V1  V2 
HG097  -0.0181 -0.0818 
HG099  -0.0188 -0.0808 
HG100  -0.021 -0.0753 
HG101  -0.0196 -0.0804 
HG1941  -0.0206 0.0174 
HG1942  -0.031 0.0075 
HG1944  -0.0291 0.0454 
HG1945  -0.0245 -0.0128 
HG1947  -0.0184 -0.0065 
HG1950  0.006 0.0167 
NA18542 -0.0296 0.0899 
NA18543 -0.0318 0.1012 
NA18544 -0.0305 0.096 
NA18545 -0.0317 0.1068 
NA18546 -0.0315 0.1016 
NA18547 -0.0332 0.098 

df2:

GR1  GR2  GR3  GR4 
HG097 HG100  HG1944  NA18543 
HG099 HG1941 HG1945  NA18544 
HG101 HG1947 NA18542 NA18545 

Jetzt, während V1 v.s V2 von df1 Plotten, möchte ich die Punkte Farbe auf der Basis der Gruppe, zu der seine individual gehört in df2. Also, wie wird die Schleife für diesen Zweck eingestellt?

df1 <- read.table("data_file", header =T) 
df2 <- read.table("persons_group_file", header =T) 
plot(df1$V1, df1$V2, col=...............) 
+0

Warum haben Sie einen ggplot2-Tag, wenn Sie nicht ggplot verwenden Sie? – Heroka

+0

Es ist in Ordnung, wenn die Aufgabe mit ggplot2 erreicht werden kann. –

Antwort

3

Sie keine Schleife hier benötigen, müssen Sie merge und melt. Hier ist, wie ich es lösen würde: Drehen Sie DF2 auf langes Format und fusionieren Sie dann mit DF1. Plotten mit ggplot ist dann einfach.

Beachten Sie, dass nicht alle Ihre Personen Gruppen innerhalb Ihrer Beispieldaten zugewiesen wurden.

library(reshape2) 
library(ggplot2) 

#Convert df2 from wide format to long format 
mergedat <- melt(df2,measure.vars=colnames(df2)) 

#Merged the data into df1: 
plotdat <- merge(df1, mergedat, by.x="individuals",by.y="value", all.x=T) 

#head(plotdat) 
# individuals  V1  V2  variable 
# 1  HG097 -0.0181 -0.0818  GR1 
# 2  HG099 -0.0188 -0.0808  GR1 
# 3  HG100 -0.0210 -0.0753  GR2 
# 4  HG101 -0.0196 -0.0804  GR1 
# 5  HG1941 -0.0206 0.0174  GR2 
# 6  HG1942 -0.0310 0.0075  <NA> 

#plotting 
p1 <- ggplot(plotdat, aes(x=V1,y=V2,color=variable)) + geom_point() 
p1 
1

Ich würde vermeiden, eine Schleife zu verwenden, um dies zu tun. Wenn Sie Ihre Daten im richtigen Format haben, können Sie diese einfach an ggplot2 übergeben.

#First do some data wrangling to get data into correct format 
#load required libraries 
library(tidyr) 
library(dplyr) 
#Convert df2 from wide format to long format 
tall_df <- tidyr::gather(df2) 
#Incorporate that data into df1 
merged_df <- dplyr::full_join(df1, tall_df, by = c("individuals" = "value")) 
#Then pass this data to ggplot2 to print: 
library(ggplot2) 
g = ggplot(merged_df, aes(x = V1, y=V2)) + geom_point() + aes(colour = key) 
g 

enter image description here

Verwandte Themen