簡體   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