繁体   English   中英

将行中的唯一字符串重整为R中的列

[英]reshape unique strings in rows into columns in R

我想根据“ Bull”列( all数据框)中的唯一字符串重塑数据:

EBV       Bulls
0.13    NE001362
0.17    NE001361
0.05    NE001378
-0.12   NE001359
-0.14   NE001379
0.13    NE001380
-0.46   NE001379
-0.46   NE001359
-0.68   NE001394
0.28    NE001391
0.84    NE001394
-0.43   NE001393
-0.18   NE001707

我的预期输出:

NE001362    NE001361    NE001378    NE001359    NE001379    NE001380    NE001394    NE001391    NE001393    NE001707
  0.13        0.17        0.05       -0.12       -0.14        0.13       -0.68        0.28       -0.43       -0.18
                                     -0.46       -0.46                    0.84          

我尝试了dat2 <- dcast(all, EBV~variable, value.var = "Bulls")但不起作用。

您有两个选择。 Bulls每个级别索引多次出现的索引,或使用列表保留不同级别的EBV

选项1:索引多个事件

您可以使用data.table生成一个索引多次EBV的索引:

require(data.table)
setDT(all)                    ## convert to data.table
all[, index:=1:.N, by=Bulls]  ## generate index
dcast.data.table(all, formula=index ~ Bulls, value.var='EBV') 

选项2:使用列表存储多个值

您可以将列表用作data.table的值(我不确定普通data.frame支持它)。

require(data.table)
setDT(all)                       ## convert to data.table
all[, list(list(EBV)), by=Bulls] ## multiple values stored as list

只是为了确保基数R得到一些认可:

## Add an ID, like ilir did, but with base R functions
mydf$ID <- with(mydf, ave(rep(1, nrow(mydf)), Bulls, FUN = seq_along))

reshape

reshape(mydf, direction = "wide", idvar="ID", timevar="Bulls")
#   ID EBV.NE001362 EBV.NE001361 EBV.NE001378 EBV.NE001359 EBV.NE001379
# 1  1         0.13         0.17         0.05        -0.12        -0.14
# 7  2           NA           NA           NA        -0.46        -0.46
#   EBV.NE001380 EBV.NE001394 EBV.NE001391 EBV.NE001393 EBV.NE001707
# 1         0.13        -0.68         0.28        -0.43        -0.18
# 7           NA         0.84           NA           NA           NA

xtabs 注意:这是一个类似表格的matrix ,因此,如果要使用data.frame ,则必须在输出中使用as.data.frame.matrix

xtabs(EBV ~ ID + Bulls, mydf)
#    Bulls
# ID  NE001359 NE001361 NE001362 NE001378 NE001379 NE001380 NE001391
#   1    -0.12     0.17     0.13     0.05    -0.14     0.13     0.28
#   2    -0.46     0.00     0.00     0.00    -0.46     0.00     0.00
#    Bulls
# ID  NE001393 NE001394 NE001707
#   1    -0.43    -0.68    -0.18
#   2     0.00     0.84     0.00

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM