2015-05-12 86 views
2

我有一個數據框與2 cond,並在每個cond(前和後)2個時間點。我正在創建一個線條圖,顯示兩個cond上的一組主題中來自sc列的MEDIAN值前後的值。我也想在那裏連接每個cond的前後值。即。 Pre ------發佈cond#1,Pre -----發佈cond#2。創建線圖比較兩個組的前後中位數值

數據:

id cond time sc 
1  1  0  400 
2  1  0  370 
1  1  1  300 
2  1  1  302 
1  2  0  402 
2  2  0  380 
1  2  1  220 
2  2  1  203 

這僅僅是一個數據樣本。在每個時間點的每個條件下,我的數據集中有11個科目(編號1:11)。這是我迄今爲止最好的代碼:

ggplot(data = df, aes(x = time, y = sc, group = cond, color = factor(cond))) + 
geom_line() + 
geom_point() + 
facet_wrap(~cond) + 
ylab("Switch Cost") 

眼下這段代碼給了我從各個條件(條件)的所有點,而不僅僅是一個點顯示了中值。今天在網上搜索了好幾個小時,但找不到類似於我想要創建的示例。

+0

您使用的是什麼編程語言或工具?你試過什麼了?你遇到了什麼問題? – Dijkgraaf

+0

只需添加這些點。對不起,遺憾。 – Colin

+0

如果您操縱數據(即按組計算前後中位數),則通常情況會更好,然後對其進行繪圖。試圖立即做這兩個有時工作,但通常是做事情的複雜方式。關於如何計算羣組統計(平均數,中位數,任何事)有很多問題。 – Gregor

回答

2

是否這樣?

d1 <- "id cond time sc 
1  1  0  400 
2  1  0  370 
1  1  1  300 
2  1  1  302 
1  2  0  402 
2  2  0  380 
1  2  1  220 
2  2  1  203" 
library("data.table") 
d1 <- data.table(read.table(text=d1, header = TRUE)) 
d1[, "median" := median(sc), by=list(cond, time)] 
library("ggplot2") 
ggplot(d1, aes(x=time, y=median, color=factor(cond))) + 
    geom_line() + 
    geom_point() 

,並提供:

enter image description here

我發現data.table是這種類型的「組由」 /「總結」問題的最簡單的方法,但也有許多其他問題。

此外,請仔細撥打電話df,因爲這會覆蓋stats::df()

0

在vanilla R中,您可以使用aggregate獲得與@ dardisco的data.tables解決方案相同的功能。

d1 <- ... as above ... 
d2 <- read.table(text=d1, header=T) 
d3 <- aggregate(sc ~ time + cond, d2, median) 
require(ggplot2) 
ggplot(d3) + geom_line(aes(x=time, y=sc, color=factor(cond))