2013-06-24 63 views
0

我有那些2所列出:R如何将列表转换为可绘制的数据框?

> FHM_CS 
$X3 
[1] 100 

$X5 
[1] 100 

$X7 
[1] 54.23706 63.48137 51.04026 60.14302 70.39396 56.59812 75.41480 88.26871 70.96976 54.20140 63.43252 
[12] 51.00868 60.10348 70.33980 56.56310 75.36522 88.20079 70.92585 

$X9 
[1] 38.63259 27.74551 21.17788 100.00000 73.08030 55.78148 85.86148 38.56665 27.71148 21.15804 
11] 72.99067 55.72924 85.78107 

$XAS 
[1] 0 

$XPW 
[1] 49.07016 40.02288 23.87023 100.00000 89.30224 53.26115 69.98929 0.00000 

> FHM_CD 
$X3 
[1] 14.8840750 17.7316138 6.1164435 0.0000000 1.1435141 14.8904265 17.7375474 6.1241709 1.1506441 
[10] 14.6751282 17.5364297 5.8621689 0.9089743 

$X5 
[1] 74.41660 76.74417 80.95828 58.58119 62.34946 69.17199 57.25100 61.14029 68.18193 74.38872 76.72114 
[12] 80.94284 58.53606 62.31217 69.14699 57.20442 61.10180 68.15613 74.34258 76.68302 80.91730 58.46136 
[23] 62.25047 69.10565 57.12732 61.03811 68.11346 

$X7 
[1] 66.30768 60.56507 68.29355 49.37678 40.74842 52.36058 36.42026 25.58356 40.16773 66.32983 60.59541 
[12] 68.31317 49.41006 40.79401 52.39005 36.46206 25.64082 40.20475 

$X9 
[1] 66.14771 75.68765 81.44262 55.01738 67.69397 75.34112 51.61251 65.24862 73.47461 66.20550 75.71747 
[12] 81.46000 55.09417 67.73359 75.36421 51.69510 65.29125 73.49945 

$XAS 
[1] 25.62701 45.29201 44.51013 0.00000 17.99168 16.81963 

$XPW 
[1] 7.344758 24.428011 54.927770 0.000000 4.637824 43.124615 39.752560 100.000000 

,我愿做一个“clustured抖动情节”从两个列表中的每个行。例如:FHM_CS中的X3和FHM_CD中的X3中的X3,列表中的每一行都有一个。

我想用qplot从GEOM =“抖动” GGPLOT2的,但我也想补充一个单杠每个酒吧的空间去展示平均每个列表。

这将是类似的东西,除了我想为每个列表添加平均值作为水平红色条(如果可能的话)和聚类部分(如蓝色的FHM_CS和红色的FHM_CD)。

jitterplot

那么如何将这些列表转换为数据帧,以及如何从那里绘制呢?

回答

1

要创建一个data.frame,你可以做到这一点粗制滥造这样的:

df <- data.frame(values=unlist(FHM_CS, use.names=FALSE), tag=rep(names(FHM_CS), times=sapply(FHM_CS, length)) 

但对于ggplot2使用,我们应该一切都合并到一个单一的数据帧:

df.CS <- data.frame(values=unlist(FHM_CS, use.names=FALSE), tag=rep(names(FHM_CS), times=sapply(FHM_CS, length)), class='CS', stringsAsFactors=TRUE) 
df.CD <- data.frame(values=unlist(FHM_CD, use.names=FALSE), tag=rep(names(FHM_CD), times=sapply(FHM_CD, length)), class='CD', stringsAsFactors=TRUE) 
my.data <- rbind(df.CS, df.CD) 

编辑或者,如看到的米歇尔发现,使用melt

library(reshape2) 
df.CD <- data.frame(melt(FHM_CD), class='CD') 
df.CS <- data.frame(melt(FHM_CS), class='CS') 
## Except now, instead of `tag`, we have `L1`. 
my.data <- rbind(df.CD, df.CS) 
my.data$tag <- my.data$L1 

编辑结束

再到情节,只要你想(我是懒并没有进入多数据):

library(ggplot2) 
ggplot(my.data, aes(x=interaction(tag, class), y=values)) + geom_point(position=position_jitter()) 

enter image description here

但是让我们尝试添加水平条。但是,我会用磨制所以我们会得到如下:

ggplot(my.data, aes(x=tag, y=values)) + geom_point(position=position_jitter()) + stat_summary(fun.y='mean', geom='errorbarh', aes(xmin=as.integer(tag)-0.3, xmax=as.integer(tag)+0.3), height=0) + facet_grid(.~class) 

enter image description here

编辑2

首先手动创建交互载体:

my.data$it <- with(my.data, interaction(tag, class, sep=' - ', lex.order=TRUE)) 

然后我们情节如从前那样。

ggplot(my.data, aes(x=it, y=values)) + geom_point(position=position_jitter()) + stat_summary(fun.y='mean', geom='errorbarh', aes(xmin=as.integer(it)-0.3, xmax=as.integer(it)+0.3, height=0, colour=class)) 

enter image description here

当然,你可能要编辑的参数position_jitter()挤点更近了。

+0

确定非常好,这就是我需要的,但是你知道如何做同样的事情,但聚集像在Excel中?我的意思是FHM_CS的X3和FHM_CD的X3应该是正确的,一个应该是蓝色的,另一个是红色的,X5 X7 X9 XAS和XPW应该是相同的 – Wicelo

1
lst1 <- list("A", "B", "C") 

lst2 <- list(rnorm(1000), rnorm(1000), rnorm(1000)) 


library(ggplot2) 
library(reshape2) 

df <- merge(melt(lst1, value.name="id"), melt(lst2), by="L1") 
# L1 is just an output from melt.list method and represents the list items' index 
> head(df) 
    L1 id  value 
1 1 A 2.0216986 
2 1 A 1.4856589 
3 1 A -0.2204599 
4 1 A 0.6514056 
5 1 A 0.3035737 
6 1 A 0.8371660 

qplot(id, value, data=df, geom="jitter") 

enter image description here

相关问题