2012-11-06 7 views
0

재구성 기능에 문제점이 있습니다. 나는 지금 당분간 지쳤으나 작동하지 않습니다.R 재 작성 기능

KeyItem Year Value 
    Income  2011  10000 
    Income  2010  29299 
    Depth  2010  29393 
    Market Cap 2010  39393 
    Depth  2011  20000 
    Market Cap 2011  30000 

을 나는 내 기능에 대해 다음과 같이해야합니다 : 내 데이터는 다음과 같습니다

KeyItem  2011   2010 
    Income   10000  29299 
    Depth   20000  29393 
    Market Cap  30000  39393 
+0

이 작업을 수행하는 다양한 방법의 모음이 답변을 참조하십시오 : 당신의 data.frame이라고 "DF"를 가정하면, 여기이 (반) 기본 R의 옵션입니다 http://stackoverflow.com/a/9617424/210673 – Aaron

답변

4

가장 쉬운 방법은 reshape2 패키지의 dcast 기능을 사용하는 것입니다. 데이터의 첫 번째로드 : 마지막으로 그냥 dcast 기능을

library(reshape2) 

:

dd = read.table(textConnection("KeyItem Year Value 
Income 2011 10000 
Income 2010 29299 
Depth 2010 29393 
Market 2010 39393 
Depth 2011 20000 
Market 2011 30000"), header=TRUE) 

다음 패키지를로드

dcast(dd, KeyItem ~ Year) 

는 얻을 :

R> dcast(dd, KeyItem ~ Year) 
Using Value as value column: use value.var to override. 
    KeyItem 2010 2011 
1 Depth 29393 20000 
2 Income 29299 10000 
3 Market 39393 30000 

다른 방향으로 가려면 그냥 사용하십시오. melt 기능 :

melt(dcast(dd, KeyItem ~ Year)) 

당신은 일반적인 방법으로 열을 재정렬 할 수

:

dd1 = dcast(dd, KeyItem ~ Year) 
dd1[,c("KeyItem", sort(colnames(dd1[, 2:ncol(dd1)]),TRUE))] 
+0

정확히 내가 원했던 것에 감사드립니다. 지금 첫 번째 열은 내 마지막 또는 가장 오래된 해입니다. 다른 방법으로 그것을 할 수있는 방법이 있습니다. 내 첫 번째 칼럼이 나의 가장 최근의 칼럼 이니? – MarMarko

+1

@ MarMarko 답변보기 – csgillespie

3
df <- read.table(text="KeyItem Year Value 
Income  2011  10000 
Income  2010  29299 
Depth  2010  29393 
Market_Cap 2010  39393 
Depth  2011  20000 
Market_Cap 2011  30000",header=TRUE) 

library(reshape2) 
df2 <- dcast(df,KeyItem~Year) 

#  KeyItem 2010 2011 
#1  Depth 29393 20000 
#2  Income 29299 10000 
#3 Market_Cap 39393 30000 
+0

정확히 내가 원했던 것을 감사드립니다. 지금 첫 번째 열은 내 마지막 또는 가장 오래된 해입니다. 다른 방법으로 그것을 할 수있는 방법이 있습니다. 내 첫 해가 저의 마지막 해가 되었습니까? – MarMarko

+1

빠르고 더러운 :'df2 <- df2 [, c (1,3,2)]' – seancarmody

+0

잘 작동하지만 더 좋은 방법이 있습니까? – MarMarko

0

제 1, "바꿀"와 "reshape2"패키지는 일반적으로 모든 사랑을 얻을 수 있지만, 베이스 R에도 옵션이 있습니다.

## Using base R reshape() 
reshape(df, direction = "wide", idvar="KeyItem", timevar="Year") 
#  KeyItem Value.2011 Value.2010 
# 1  Income  10000  29299 
# 3  Depth  20000  29393 
# 4 Market_Cap  30000  39393 

## Using xtabs() 
xtabs(Value ~ KeyItem + Year, df) 
#    Year 
# KeyItem  2010 2011 
# Depth  29393 20000 
# Income  29299 10000 
# Market_Cap 39393 30000 

## Here's the "half": Using xtabs(), but as a data.frame 
as.data.frame.matrix(xtabs(Value ~ KeyItem + Year, df)) 
#    2010 2011 
# Depth  29393 20000 
# Income  29299 10000 
# Market_Cap 39393 30000