Как преобразовать таблицу набора данных в матрицу в R - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть такой набор данных

df <- data.frame("col1" = c("a", "b", "a", "c", "d", "e", "f", "c"), "col2" = c("v2", "v2", "v2", "v3", "v4", "v1", "v2", "v4"), "index" = c(3,1,3,0,1,2,3,0))

И я надеюсь получить такую ​​матрицу:

  v1 v2 v2 v3 v4
a 0  3  3  0  0
b 0  1  0  0  0
c 0  0  0  0  0
d 0  0  0  0  1
e 2  0  0  0  0
f 0  3  0  0  0

Большое спасибо за ваш ответ !!

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

У вас нет уникального идентификатора в ваших группах, и значения (V2) повторяются.Мы можем complete col1 и col2 значения и fill index с 0. Создать уникальный идентификатор для каждой группы (col1), а затем spread значения.

library(tidyverse)

df %>%
  complete(col1, col2, fill = list(index = 0)) %>% 
  group_by(col1) %>%
  mutate(col2 = paste0("V", row_number())) %>%
  spread(col2, index, fill = 0)

#  col1     V1    V2    V3    V4    V5
#  <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 a         0     3     3     0     0
#2 b         0     1     0     0     0
#3 c         0     0     0     0     0
#4 d         0     0     0     1     0
#5 e         2     0     0     0     0
#6 f         0     3     0     0     0
0 голосов
/ 18 апреля 2019

Мы можем сделать это легко за base R

xtabs(index ~ col1 + col2, unique(df))
#  col2
#col1 v1 v2 v3 v4
#   a  0  3  0  0
#   b  0  1  0  0
#   c  0  0  0  0
#   d  0  0  0  1
#   e  2  0  0  0
#   f  0  3  0  0

ПРИМЕЧАНИЕ: пакеты не загружены

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...