r data.table выводится в столбцах - PullRequest
1 голос
/ 13 апреля 2020

Я медленно изучаю data.table, но я пытаюсь получить нужный мне формат вывода.

> z = data.table(X=c(1,1,1,2,2,2), Y=c("a","a","b","a","b","b"), Z=c(2,4,3,5,0,7))
> z
   X Y Z
1: 1 a 2
2: 1 a 4
3: 1 b 3
4: 2 a 5
5: 2 b 0
6: 2 b 7
> ansz <- z[, mean(Z), .(X, Y)]
> ansz
   X Y  V1
1: 1 a 3.0
2: 1 b 3.0
3: 2 a 5.0
4: 2 b 3.5

Это здорово, но я хотел бы разбить вывод на столбцы по переменной Y (см. ниже). Я думаю, что lapply (), но не могу понять это.

   X Y=a Y=b
1: 1 3.0 3.0
2: 2 5.0 3.5

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Вы почти достигли.

library(data.table)
dt <- fread('X Y  V1
1 a 3.0
1 b 3.0
2 a 5.0
2 b 3.5')

dcast(dt,X~Y,value.var = "V1")
#>    X a   b
#> 1: 1 3 3.0
#> 2: 2 5 3.5

Тогда вы можете просто переименовать столбцы

Или вы можете сначала создать имена.

library(data.table)
dt <- fread('X Y  V1
1 a 3.0
1 b 3.0
2 a 5.0
2 b 3.5')


dt[,new_names:=ifelse(Y=="a","Y=a","Y=b")]

dcast(dt,X~new_names,value.var = "V1")
#>    X Y=a Y=b
#> 1: 1   3 3.0
#> 2: 2   5 3.5
0 голосов
/ 13 апреля 2020

Цепь dcast() к тому, что вы уже сделали:

z[, mean(Z), .(X, Y)
  ][, dcast(.SD, X ~ paste0("y=", Y))]

   X y=a y=b
1: 1   3 3.0
2: 2   5 3.5

Или напрямую используйте dcast() с fun = mean:

dcast(z, X ~ paste0("y=", Y), fun=mean)

   X y=a y=b
1: 1   3 3.0
2: 2   5 3.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...