簡體   English   中英

在 dcast() 參數“value.var”上

[英]on dcast() argument “value.var”

因此,我上次在 dataframe 上使用了 dcast() ,其中一列是 ID,其他多個代碼為每個 ID 分配。 我的 df1 看起來像這樣:

ID  codes    gfreq
123  FGV34     0.988
123  FGV34     0.988
123  FGV34     0.988 
566  WER45     na
566  FGV34      0.988
566  FGV34      0.988

為了將上述格式操作為:

ID  FGV34  WER45
123  1       0
566  1       1

dcast(df1, ID ~ codes) 

而且效果很好。 現在,我有一個類似的 dataframe df2,它只有兩列,ID 和代碼。

ID  codes    
123  FGV34     
123  FGV34    
123  FGV34     
566  WER45     
566  FGV34      
566  FGV34 

當我將它運行到 dcast 中時: 1. 我收到關於 Value.var 被覆蓋並且代碼列用作 value.var 的警告,這沒問題 2. 這次我獲得 output 的格式完全不同。

ID  FGV34  WER45
123 FGV34    NA
566 FGV34  WER45

我檢查了 df1 和 df2 中屬性的數據類型。 對於 ID 和代碼,它們是相同的。 我需要幫助獲取 output 像以前一樣使用 0 或 1 而不是 NA 和列名。 其次,我想了解 dcast() 的行為發生了哪些變化。

reshape2spread都已被棄用或退役 - tidyverse現在希望您使用pivot_wider 我不是最新的那種語法,但dcast仍然可以用data.table做你想做的事。

library(data.table)
d1 <- data.table(ID = c(11,11,11,12,12,12), 
                 codes = c('a', 'a', 'a', 'b', 'a', 'a'), 
                 gfreq = c(.5,.5,.5,NA,.5,.5))
dcast(d1, ID ~ codes)
#> Using 'gfreq' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#>    ID a b
#> 1: 11 3 0
#> 2: 12 2 1

d2 <- data.table(ID = c(11,11,11,12,12,12), 
                 codes = c('a', 'a', 'a', 'b', 'a', 'a'))
dcast(d2, ID ~ codes)
#> Using 'codes' as value column. Use 'value.var' to override
#> Aggregate function missing, defaulting to 'length'
#>    ID a b
#> 1: 11 3 0
#> 2: 12 2 1

## If you only want 1's and 0's
dcast(unique(d2), ID ~ codes, 
      fun.aggregate = length)
#> Using 'codes' as value column. Use 'value.var' to override
#>    ID a b
#> 1: 11 1 0
#> 2: 12 1 1

reprex package (v0.3.0) 於 2019 年 10 月 16 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM