你好,我用這些特徵的表工作: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
我將不勝感激,如果有人可以給我一個解決方案。
你好,我用這些特徵的表工作: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
我將不勝感激,如果有人可以給我一個解決方案。
可能我理解這個錯誤,但是?reshape
你在找什麼? 從例子:
summary(Indometh)
wide <- reshape(Indometh, v.names="conc", idvar="Subject", timevar="time", direction="wide")
wide
下面是一個相對簡單的解決方案:
# 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
我猜你是新的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
包,但這應該讓你開始。