2011-12-15 68 views
0

你好,我用這些特徵的表工作:R錶轉換

2000 0.051568 
2000 0.04805 
2002 0.029792 
2002 0.056141 
2008 0.047285 
2008 0.038989 

,我需要將其轉換爲這樣的事情:

2000  2002  2008 

0.051568 0.029792 0.047285 
0.04805 0.056141 0.038989 

我將不勝感激,如果有人可以給我一個解決方案。

回答

0

可能我理解這個錯誤,但是?reshape你在找什麼? 從例子:

summary(Indometh) 
wide <- reshape(Indometh, v.names="conc", idvar="Subject", timevar="time", direction="wide") 

wide 
2

下面是一個相對簡單的解決方案:

# CREATE ORIGINAL DATA.FRAME 
df <- read.table(text="2000 0.051568 
2000 0.04805 
2002 0.029792 
2002 0.056141 
2008 0.047285 
2008 0.038989", header=FALSE) 
names(df) <- c("year", "value") 

# MODIFY ITS LAYOUT 
df2 <- as.data.frame(split(df$value, df$year)) 
df2 
#  X2000 X2002 X2008 
# 1 0.051568 0.029792 0.047285 
# 2 0.048050 0.056141 0.038989 
1

我猜你是新的R,所以我要猜你的意思,給你多一些正確的術語。如果我猜錯了,那麼至少這可能會幫助你澄清這個問題。

在R中,表格是由交叉列表產生的矩陣的特例。我認爲你有(或者想要)開始是data.frame。 A data.frame是一組可能具有不同類型的列,但長度相同;在這個意義上它是「矩形」的。通常,data.frame的列(即每行)中的相同位置中的元素彼此相關。 data.frame的列具有名稱,行也是如此。

long <- data.frame(year=c(2000,2000,2002,2002,2008,2008), 
        val=c(0.051568, 0.04805, 0.029792, 
         0.056141, 0.047285, 0.038989)) 

打印了模樣

> long 
    year  val 
1 2000 0.051568 
2 2000 0.048050 
3 2002 0.029792 
4 2002 0.056141 
5 2008 0.047285 
6 2008 0.038989 

通過自身的時候,這是不夠的,因爲你需要的輸出,你需要指定,比如說哪個值,2000是第一行並在第二個(如果有更多的話)等等。在你的榜樣,這只是他們的順序。

long$targetrow = 1:2 

這使得long現在看起來像

> long 
    year  val targetrow 
1 2000 0.051568   1 
2 2000 0.048050   2 
3 2002 0.029792   1 
4 2002 0.056141   2 
5 2008 0.047285   1 
6 2008 0.038989   2 

現在你可以使用它reshape

reshape(long, idvar="targetrow", timevar="year", direction="wide") 

這給

> reshape(long, idvar="targetrow", timevar="year", direction="wide") 
    targetrow val.2000 val.2002 val.2008 
1   1 0.051568 0.029792 0.047285 
2   2 0.048050 0.056141 0.038989 

更復雜的轉換也是可以使用reshape2包,但這應該讓你開始。