Co można zrobić z danymi.ramka, której nie można z danymi.stolik?
Właśnie zacząłem używać R, i natknąłem się na dane.stolik. Uważam to za genialne.
Bardzo naiwne pytanie: Czy mogę zignorować dane.ramka do wykorzystania danych.tabela aby uniknąć pomyłek składni pomiędzy dwoma pakietami?
1 answers
Z danych .tabela FAQ
FAQ 1.8 OK, zaczynam widzieć jakie dane.tabela jest o, ale dlaczego nie poprawiłeś danych.ramka w R? Dlaczego to musi być nowy pakiet?
Jako FAQ 1.1 highlights,
j
W[.data.table
jest zasadniczo różni się odj
W[.data.frame
. Nawet coś tak prostego jakDF[,1]
złamałby istniejący kod w wielu pakietach i Kod użytkownika. Jest to projektowane i chcemy, aby działało w ten sposób dla więcej skomplikowana składnia do działania. Tam są też inne różnice (patrz FAQ 2.17).Ponadto,
data.table
dziedziczy zdata.frame
. Jest todata.frame
, też. Adata.table
można przekazać do dowolnego pakietu, który akceptuje tylko {[6] } i ten pakiet może używać[.data.frame
składnia nadata.table
.W miarę możliwości zaproponowaliśmy również ulepszenia R. Jeden z zostały one przyjęte jako nowa funkcja W R 2.12.0:
unique()
imatch()
są teraz szybsze na wektorach znaków, gdzie wszystkie elementy są w globalnymCHARSXP
cache i mają nieoznaczone kodowanie (ASCII). Podziękowania dla Mateusza Dowle za sugestie usprawnień do sposobu generowania kodu hashowego wunique.
c.Drugą propozycją było użycie
memcpy
wduplicate.c
, co jest znacznie szybciej niż pętla A for W C. poprawiłoby to sposób kopiowania R dane wewnętrzne (na niektórych miarach 13 razy). Wątek na R-devel jest tutaj : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html .
Jakie są mniejsze różnice w składni pomiędzy data.frame
a danymi.tabela
DT[3]
odnosi się do 3. wiersz, aleDF[3]
odnosi się do 3. kolumnaDT[3, ] == DT[3]
, AleDF[ , 3] == DF[3]
(nieco myląco w danych.frame, natomiast data.tabela jest spójna)- z tego powodu mówimy, że przecinek jest opcjonalny w
DT
, ale nie opcjonalny wDF
DT[[3]] == DF[, 3] == DF[[3]]
DT[i, ]
, gdziei
jest pojedynczą liczbą całkowitą, Zwraca pojedynczy wiersz, podobnie jakDF[i, ]
, ale w przeciwieństwie do macierzy jednorzędowej, która zwraca wektor.DT[ , j]
gdzie {[0] } jest pojedynczą liczbą całkowitą zwraca dane z jednej kolumny.tabela, w przeciwieństwie doDF[, j]
, która domyślnie zwraca wektorDT[ , "colA"][[1]] == DF[ , "colA"]
.DT[ , colA] == DF[ , "colA"]
(obecnie w danych.tabela v1.9. 8, ale wkrótce się zmieni, zobacz Uwagi do wydania)DT[ , list(colA)] == DF[ , "colA", drop = FALSE]
DT[NA]
zwraca 1 wierszNA
, aleDF[NA]
zwraca całą kopięDF
zawierającąNA
w całości. SymbolNA
jest typemlogical
W R i dlatego jest przetwarzany przez[.data.frame
. Intencją użytkownika było prawdopodobnieDF[NA_integer_]
.[.data.table
przekierowuje do tej prawdopodobnej intencji automatycznie, dla wygody.DT[c(TRUE, NA, FALSE)]
traktujeNA
jakoFALSE
, aleDF[c(TRUE, NA, FALSE)]
zwracaNA
wiersze dla każdegoNA
DT[ColA == ColB]
jest prostsze niżDF[!is.na(ColA) & !is.na(ColB) & ColA == ColB, ]
data.frame(list(1:2, "k", 1:4))
tworzy 3 kolumny, data.tabela tworzy jedną kolumnęlist
.check.names
jest domyślnieTRUE
Wdata.frame
, aleFALSE
w danych.stolik dla wygody.stringsAsFactors
jest domyślnieTRUE
Wdata.frame
, aleFALSE
w danych.tabela, dla efektywności. Ponieważ globalny bufor łańcuchów został dodany do R, elementy znaków są wskaźnikiem do pojedynczego buforowanego łańcucha i nie ma już korzyści z konwersji nafactor
.- Wektory atomowe w kolumnach
list
są zwijane po wydrukowaniu za pomocą", "
wdata.frame
, ale","
w danych.tabela z końcowym przecinkiem po 6 pozycji, aby uniknąć przypadkowego drukowania dużych osadzonych obiektów. W {[3] } bardzo często ustawiamydrop = FALSE
. Gdy zapomnimy, błędy mogą pojawić się w przypadkach brzegowych, w których zaznaczone są pojedyncze kolumny i nagle zwracany jest wektor, a nie pojedyncza kolumnadata.frame
. W[.data.table
skorzystaliśmy z okazji, aby uczynić go spójnym i porzuciliśmydrop
. Kiedy dane.tabela jest przekazywana do danych.tabela-pakiet nieświadomy, pakiet ten nie dotyczy żadnego tych różnic; to po prostu działa.
Małe zastrzeżenie
Być może będą przypadki, w których niektóre pakiety używają kodu, który spada po podaniu danych.ramka, jednak biorąc pod uwagę, że data.table
jest stale utrzymywana, aby uniknąć takich problemów, wszelkie problemy, które mogą się pojawić, będą szybko naprawiane.
Na przykład
Z nowości dla v 1.8.2
- base:: unname(DT) teraz działa ponownie, zgodnie z potrzebami plyr::melt (). Dzięki Christoph Jaeckel za reportaż. Test dodany.
- as.data.dla ITime została dodana metoda frame, dzięki czemu ITime może zostać przekazany do ggplot2 bez błędu, #1713. Podziękowania dla Farrela Buchinsky ' ego za reportaż. Testy dodane. Etykiety osi ITime są nadal wyświetlane jako liczby całkowite sekund od północy; nie wiemy dlaczego ggplot2 nie powołuje się na to.charakter metoda. Konwersja ITime do POSIXct dla ggplot2, jest jednym z podejść.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-27 08:40:33