в аргументе dcast () "value.var" - PullRequest
       92

в аргументе dcast () "value.var"

0 голосов
/ 16 октября 2019

Итак, я использовал dcast () в кадре данных в прошлый раз, в котором один столбец был идентификатором, а другой - несколькими кодами, назначенными для каждого идентификатора. Мой 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) 

И он работал отлично. Теперь у меня есть аналогичный фрейм данных df2, который имеет только две колонки, идентификатор и коды.

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

Когда я запускаю его в dcast: 1. Я получаю предупреждение о том, что Value.var переопределяется, и столбец кодов используется как value.var, что хорошо. 2. Формат, в котором я получаюна этот раз вывод совершенно другой.

ID  FGV34  WER45
123 FGV34    NA
566 FGV34  WER45

Я проверил типы данных атрибутов в df1 и df2. Они одинаковы как для идентификатора, так и для кода. Мне нужна помощь в получении вывода, как раньше, с 0 или 1 вместо NA и имени столбца. Во-вторых, я хочу понять, что изменило поведение dcast () по-другому.

1 Ответ

1 голос
/ 16 октября 2019

И reshape2, и spread устарели или устарели - теперь 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

Создано в 2019-10-16 представьте пакет (v0.3.0)

...