Span-матрица из реляционной таблицы в R - PullRequest
2 голосов
/ 30 сентября 2011

Часто я использую данные, вытекающие из базы данных SQL в R. Обычно я много занимаюсь жонглированием в SQL, но все чаще и чаще пользуясь plyr, я задавался вопросом, проще ли в R разбить матрицу на реляционные данные?Таблица.Вот пример.

У меня есть таблица типа

id   question answer
 1        6      10
 1        4       1
 1        5     2003
 3        6       2

 #reproduce it with dput output:
 structure(list(result = c(1, 1, 1, 3), question = c(6, 4, 5, 
 6), answer = c("10", "1", "2003", "2")), .Names = c("id", 
 "question", "answer"), row.names = c("1", "2", "3", "4"), class = "data.frame")

, и я хотел бы расположить ее как ненормализованную матрицу:

id question.6 question.4 question.5
1       10        1          2003
3        2     

и т. Д. Я исправил это вSQL использует синтаксис CASE WHEN, но не может сделать это в R, например, так:

  Select min((case when (question_id` = 6)
  then answer end)) AS `question.6`

Ответы [ 2 ]

4 голосов
/ 30 сентября 2011

dcast in reshape2 выполнит эту работу:

> z
  id question answer
1  1        6     10
2  1        4      1
3  1        5   2003
4  3        6      2
> dcast(z, id ~ question, value_var = "answer")
  id    4    5  6
1  1    1 2003 10
2  3 <NA> <NA>  2
1 голос
/ 30 сентября 2011

Попробуйте это:

> tapply(DF[,3], DF[,-3], identity)
   question
id   4    5  6
  1  1 2003 10
  3 NA   NA  2
...