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

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

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

0
Jimmy Lee 18 Апр 2019 в 13:37

2 ответа

Лучший ответ

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

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
2
Ronak Shah 18 Апр 2019 в 10:48

Мы можем сделать это легко в 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

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

0
akrun 18 Апр 2019 в 12:15