изменить: бросить странность - PullRequest
2 голосов
/ 30 сентября 2010

Либо уже поздно, либо я обнаружил ошибку, либо приведению не нравятся имена с "." в них. Все это происходит внутри функции, но это "не работает" вне функции столько, сколько не работает внутри нее.

x <- structure(list(df.q6 = structure(c(1L, 1L, 1L, 11L, 11L, 9L, 
4L, 11L, 1L, 1L, 2L, 2L, 11L, 5L, 4L, 9L, 4L, 4L, 1L, 9L, 4L, 
10L, 1L, 11L, 9L), .Label = c("a", "b", "c", "d", "e", "f", "g", 
"h", "i", "j", "k"), class = "factor"), df.s5 = structure(c(4L, 
4L, 1L, 2L, 4L, 4L, 4L, 3L, 4L, 1L, 2L, 1L, 2L, 4L, 1L, 3L, 4L, 
2L, 2L, 4L, 4L, 4L, 2L, 2L, 1L), .Label = c("a", "b", "c", "d", 
"e"), class = "factor")), .Names = c("df.q6", "df.s5"), row.names = c(NA, 
25L), class = "data.frame")

cast(x, df.q6 + df.s5 ~., length)

Не работает.

Однако, если:

colnames(x) <- c("variable", "value")
cast(x, variable + value ~., length)

Работает как шарм.

Ответы [ 3 ]

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

Для меня я использую решение, похожее на то, на что указывает Spacedman.

#take your data.frame x with it's two columns

#add a column
x$value <- 1

#apply your cast verbatim
cast(x, df.q6 + df.s5 ~., length)

   df.q6 df.s5 (all)
1      a     a     2
2      a     b     2
3      a     d     3
4      b     a     1
5      b     b     1
6      d     a     1
7      d     b     1
8      d     d     3
9      e     d     1
10     i     a     1
11     i     c     1
12     i     d     2
13     j     d     1
14     k     b     3
15     k     c     1
16     k     d     1

Надеюсь, это поможет!

Jay

3 голосов
/ 30 сентября 2010

Ничего общего с точками в именах столбцов (это легко показать!).

Если в вашем фрейме данных нет столбца с именем 'value', то cast () определяет, какой столбец является значением - в данном случаеугадывает 'df.s5', поскольку это последний столбец.Это то, что вы получаете, когда вы расплавляете данные ().Затем он переименовывает этот столбец в значение перед вызовом reshape1.Теперь столбца df.s5 больше нет, но он слева от вашей формулы.Э-э-э ...

Вы используете значение в формуле, что довольно странно.Ни один из приведенных примеров не делает этого.Что вы пытаетесь сделать здесь?

Вы можете добавить специальный столбец в качестве фиктивного значения:

> cast(cbind(x,1), df.q6+s5~., length)

Используя 1 в качестве столбца значения.Используйте аргумент value для приведения, чтобы переопределить этот выбор

   df.q6 s5 (all)
1      a  a     2
2      a  b     2
3      a  d     3
4      b  a     1
5      b  b     1
[etc]

Но я подозреваю, что есть лучший способ получить количество повторных наблюдений (строк) в кадре данных - это ваш реальный вопрос!

2 голосов
/ 30 сентября 2010

, если вы ищете простое решение, dcast в пакете reshape2 может помочь вам:

library(reshape2)
dcast(x, df.q6 + df.s5 ~., length)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...