2015-02-13 8 views
6

Mam następujące dane i kod:Dlaczego plik data.table nie tworzy tabeli danych z tabeli, mimo że plik data.frame?

mydf 
    grp categ condition value 
1 A  X   P  2 
2 B  X   P  5 
3 A  Y   P  9 
4 B  Y   P  6 
5 A  X   Q  4 
6 B  X   Q  5 
7 A  Y   Q  8 
8 B  Y   Q  2 
> 
> 
mydf = structure(list(grp = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 
2L), .Label = c("A", "B"), class = "factor"), categ = structure(c(1L, 
1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("X", "Y"), class = "factor"), 
    condition = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("P", 
    "Q"), class = "factor"), value = c(2, 5, 9, 6, 4, 5, 8, 2 
    )), .Names = c("grp", "categ", "condition", "value"), out.attrs = structure(list(
    dim = structure(c(2L, 2L, 2L), .Names = c("grp", "categ", 
    "condition")), dimnames = structure(list(grp = c("grp=A", 
    "grp=B"), categ = c("categ=X", "categ=Y"), condition = c("condition=P", 
    "condition=Q")), .Names = c("grp", "categ", "condition"))), .Names = c("dim", 
"dimnames")), row.names = c(NA, -8L), class = "data.frame") 

Jednak po pracach na data.frame ale nie dla data.table:

> data.frame(with(mydf, table(grp, categ, condition))) 
    grp categ condition Freq 
1 A  X   P 1 
2 B  X   P 1 
3 A  Y   P 1 
4 B  Y   P 1 
5 A  X   Q 1 
6 B  X   Q 1 
7 A  Y   Q 1 
8 B  Y   Q 1 
> 
> data.table(with(mydf, table(grp, categ, condition))) 
    V1 
1: 1 
2: 1 
3: 1 
4: 1 
5: 1 
6: 1 
7: 1 
8: 1 
> 

jestem tu co jakiś błąd czy muszę skorygować komenda data.table, aby uzyskać inne zmienne? Jest bardzo mało prawdopodobne, że jest tutaj błąd. Z 2 zmiennymi działa poprawnie:

> data.table(with(mydf, table(grp, categ))) 
    categ grp N 
1:  A X 2 
2:  B X 2 
3:  A Y 2 
4:  B Y 2 
> 
> 
> data.frame(with(mydf, table(grp, categ))) 
    grp categ Freq 
1 A  X 2 
2 B  X 2 
3 A  Y 2 
4 B  Y 2 

Dzięki za pomoc.

+3

Wydaje się, że 'as.data.table (z (mydf, table (grp, categ, condition)))' działa, chociaż nie jestem pewien, dlaczego właśnie 'data.table' nie jest. Domyślam się, że istnieje metoda wykorzystująca 'dane.frame' dla' array's, która nie występuje w 'data.table', ponieważ w twoim pierwszym przykładzie jest to' tablica' w porównaniu do drugiej. Możesz także zrobić coś takiego jak 'Res <- setDT (data.frame (z (mydf, table (grp, categ, condition))))), chociaż nadal nie odpowiada na pytanie. –

+2

'data.table' wywołuje' as.data.table' tylko dla wejścia matrix lub data.frame. 'data.frame' wywołuje' as.data.frame' również dla innych danych wejściowych. – Roland

+1

powinieneś złożyć zgłoszenie błędu na github - istnieje "as.data.table.table", ale 'data.table' nie deleguje do niego; fwiw Prawie zawsze używam 'as.data.table' do konwersji pomiędzy typami - zazwyczaj jest to szybsze – eddi

Odpowiedz

Powiązane problemy