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

如果您不使用“稀疏”参数,则缺少的类别中将出现零。您可以将它们替换为 `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 回答