2017-07-11 47 views
1

我有些驚訝,我無法找到這個問題的解決方案,但我已經嘗試了我認爲可能適用的所有搜索術語。不過,如果這是重複的,我可能不會使用正確的搜索詞,因此請原諒我,並請指出正確的方向。我有按樣本分組的數據,每個樣本的每個類別都有一個值,其中有很多值。下面是一個例子數據幀(注意,樣品的類別的數量和數目通常是不同的):按R組中的線繪製多個數據集

df <- data.frame(sample = c("one", "two", "three", "four"), 
    cat_1 = c(2, 4, -6, 2), cat_2 = c(1, 2, 2, 1), 
    cat_3 = c(5, -5, 7, 2)) 

我試圖創建一個圖,其中x軸具有離散點爲每個類別中,y軸是每個類別中所有樣品的值,並且這些類別中每個樣品的這些值通過我可以定義的顏色線連接。

看起來好像ggplot2是這裏的路,但我找不到一種方法讓我按照自己想要的方式工作。看起來好像我想要colnames(dd)是使用aes()時的x軸變量,但它警告我xy長度不一樣。似乎這應該是相當簡單的事,但我無法弄清楚。

編輯:我遇到過這個帖子Plotting multiple variables from same data frame in ggplot答案顯示了我想要的劇情的確切類型,但我不知道如何使用melt將我的數據框更改爲一種格式列名稱爲cat_1,cat_2,cat_3,作爲id.vars

回答

1

函數melt來自reshape2包,將數據轉換爲長格式。它將一組列整合到一個列中。您可能需要定義ID變量,這些變量在調用該函數後將保持不變。

如果不帶參數調用,melt將假設因子和字符變量是id變量,其他所有變量都是。此外,它還提供默認列名稱:「變量」和「值」。在結果中,舊列名稱是新列「變量」下的行。

library(reshape2) 
> melt(df) 
Using sample as id variables 
    sample variable value 
1  one cat_1  2 
2  two cat_1  4 
3 three cat_1 -6 
4 four cat_1  2 
5  one cat_2  1 
6  two cat_2  2 
7 three cat_2  2 
8 four cat_2  1 
9  one cat_3  5 
10 two cat_3 -5 
11 three cat_3  7 
12 four cat_3  2 

對於你的問題,你可以使用下面的代碼,指定id_vars,並指定更多的信息列名(結構保持不變):

df2 <- melt(df, id_vars = sample, variable.name = "category", value.name = "value") 

> df2 
    sample category value 
1  one cat_1  2 
2  two cat_1  4 
3 three cat_1 -6 
4 four cat_1  2 
5  one cat_2  1 
6  two cat_2  2 
7 three cat_2  2 
8 four cat_2  1 
9  one cat_3  5 
10 two cat_3 -5 
11 three cat_3  7 
12 four cat_3  2 

ggplot(df2, aes(x=category, y=value, group=sample, col=sample)) + 
    geom_line() 

,得到以下情節 enter image description here

請讓我知道這是你想要的。

+0

非常感謝,那正是我所追求的。使用'melt'的解釋非常有用。我的問題是定義什麼是變量和什麼是一個類別。 – Jesse

+0

我的榮幸。我很高興我能幫上忙。你可以找到關於重組數據的極好的解釋:** [here](https://www.r-statistics.com/2012/01/aggregation-and-restructuring-data-from-r-in-action/)* *。 – KoenV