2

次の列を含むExcelファイルがあります

Column1  Column2  Column3
ab        bb        0.5
ab        bc        0.1  
ab        cd        0.7
ab        dd        0.8
ac        bb        0.2
ac        bg        0.8
ac        ee        0.8
ac        dd        0.3


x <- data.frame (column1 = c("ab","ab","ab","ab","ac","ac","ac","ac"), 
                 column2 = c("bb","bc","cd","dd","bb","bg","ee","dd"),
                 column3 = c(0.5, 0.1, 0.7, 0.8, 0.2, 0.8, 0.8, 0.3))

私はそれを変更したいです。

    ab   ac
bb  0.5  0.2
bc  0.1  
cd  0.7
dd  0.8  0.3
bg       0.8
ee       0.8
4

2 に答える 2

3

reshape2パッケージはここであなたの友達です:

require(reshape2)
dcast(x, column2 ~ column1, value.var="column3")
#   column2  ab  ac
# 1      bb 0.5 0.2
# 2      bc 0.1  NA
# 3      bg  NA 0.8
# 4      cd 0.7  NA
# 5      dd 0.8 0.3
# 6      ee  NA 0.8

アップデート

@jmsigner と私は事実上まったく同じ回答を同時に投稿したので、ベース R のオプションを次に示しますが、それではあまり良い出力が得られません。

reshape(x, direction="wide", idvar="column2", timevar="column1")
#   column2 column3.ab column3.ac
# 1      bb        0.5        0.2
# 2      bc        0.1         NA
# 3      cd        0.7         NA
# 4      dd        0.8        0.3
# 6      bg         NA        0.8
# 7      ee         NA        0.8
于 2012-07-31T07:35:49.240 に答える
3
xtabs(column3 ~ column2+column1, data=x, sparse=TRUE)
6 x 2 sparse Matrix of class "dgCMatrix"
    ab  ac
bb 0.5 0.2
bc 0.1 .  
bg .   0.8
cd 0.7 .  
dd 0.8 0.3
ee .   0.8

'sparse' 引数を使用しない場合、不足しているカテゴリにゼロが含まれます。それらを「is.na<-」に置き換えることができます

xt <-  xtabs(column3 ~ column2+column1, data=x) 
is.na(xt) <- xt==0
xt
       column1
column2  ab  ac
     bb 0.5 0.2
     bc 0.1    
     bg     0.8
     cd 0.7    
     dd 0.8 0.3
     ee     0.8
于 2012-07-31T08:08:48.837 に答える