data.table로 할 수없는 data.frame으로 무엇을 할 수 있습니까?
방금 R을 사용하기 시작했고 data.table을 발견했습니다. 나는 그것이 훌륭하다는 것을 알았다.
매우 순진한 질문 : 두 패키지 간의 구문 혼동을 피하기 위해 data.table을 사용하기 위해 data.frame을 무시할 수 있습니까?
FAQ 1.8 좋아요, data.table이 무엇인지 알아보기 시작했는데 왜 R에서 data.frame을 향상시키지 않았나요? 새 패키지 여야하는 이유는 무엇입니까?
FAQ 1.1 하이라이트로서
j에서[.data.table근본적으로 다르다j에서[.data.frame.DF[,1]많은 패키지와 사용자 코드에서 기존 코드를 깨뜨리는 것과 같은 단순한 것 조차도 말입니다 . 이것은 의도적으로 설계된 것이며 더 복잡한 구문이 작동하도록 이러한 방식으로 작동하기를 원합니다. 다른 차이점도 있습니다 (FAQ 2.17 참조).또한
data.table상속data.frame. 그것도입니다data.frame. A는data.table단지이 수락하는 모든 패키지에 전달 될 수data.frame및 해당 패키지를 사용할 수 있습니다[.data.frame온 구문을data.table.가능한 한 R에 대한 개선 사항도 제안했습니다. 다음 중 하나가 R 2.12.0의 새로운 기능으로 채택되었습니다.
unique()그리고match()모든 요소가 세계에있는 문자 벡터 지금 빨라CHARSXP캐시 및 표시되지 않은 인코딩 (ASCII)가 있습니다.unique.c 에서 해시 코드가 생성되는 방식에 대한 개선을 제안 해 주신 Matthew Dowle에게 감사드립니다 .두 번째 제안은
memcpyin 을 사용duplicate.c하는 것이 었는데, 이는 C의 for 루프보다 훨씬 빠릅니다. 이렇게하면 R이 내부적으로 데이터를 복사하는 방식이 향상됩니다 (일부 측정에서는 13 배). r-devel의 스레드는 여기에 있습니다 : http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html .
data.frame와 data.table 의 작은 구문 차이점은 무엇입니까 ?
DT[3]세 번째 행을DF[3]참조 하지만 세 번째 열을 참조합니다.DT[3, ] == DT[3], 그러나DF[ , 3] == DF[3](data.frame에서는 다소 혼란 스럽지만 data.table은 일관성이 있음)- 이러한 이유로 우리는 쉼표라고 선택 에
DT되지 않는 옵션에 있지만,DFDT[[3]] == DF[, 3] == DF[[3]]DT[i, ], 여기서는i단일 정수이고는와 같이 단일 행DF[i, ]을 반환하지만 벡터를 반환하는 행렬 단일 행 하위 집합과는 다릅니다.DT[ , j]여기서는j단일 정수가 1 열 data.tableDF[, j]을 반환하지만 기본적으로 벡터를 반환하는 것과는 다릅니다.DT[ , "colA"][[1]] == DF[ , "colA"].DT[ , colA] == DF[ , "colA"](현재 data.table v1.9.8에 있지만 곧 변경 될 예정입니다. 릴리스 정보 참조)DT[ , list(colA)] == DF[ , "colA", drop = FALSE]DT[NA]의 1 행을 반환NA하지만DF[NA]전체를DF포함 하는 전체 복사본을 반환합니다NA. 기호NA는logicalR의 유형 이므로에서 재활용됩니다[.data.frame. 사용자의 의도는 아마도DF[NA_integer_].[.data.table편의를 위해이 가능한 의도로 자동 전환됩니다.DT[c(TRUE, NA, FALSE)]처리NA로FALSE하지만,DF[c(TRUE, NA, FALSE)]반환NA각 행NADT[ColA == ColB]보다 간단합니다DF[!is.na(ColA) & !is.na(ColB) & ColA == ColB, ]data.frame(list(1:2, "k", 1:4))3 개의 열을 만들고 data.table은 하나의list열을 만듭니다 .check.names편의를 위해 기본적TRUE으로data.frame있지만FALSEdata.table에 있습니다.stringsAsFactors효율성을 위해 기본적TRUE으로data.frame있지만FALSEdata.table에 있습니다. 전역 문자열 캐시가 R에 추가되었으므로 문자 항목은 단일 캐시 된 문자열에 대한 포인터이며 더 이상 .NET으로 변환해도 성능상의 이점이 없습니다factor.- 원자의 벡터
list열은 인쇄하면 접혀", "에data.frame있지만","6 항목 후 콤마와 data.table 대형 포함 개체 실수 인쇄 않도록. 에서[.data.frame우리는 매우 자주 설정drop = FALSE. 잊어 버리면 단일 열이 선택되고 갑자기 단일 열이 아닌 벡터가 반환되는 경우에 버그가 발생할 수 있습니다data.frame. 에서[.data.table우리는 일관성을 할 수있는 기회를 가져다가 떨어졌다drop. data.table이 data.table-unaware 패키지로 전달되면 해당 패키지는 이러한 차이점과 관련이 없습니다. 그냥 작동합니다.
작은 경고
일부 패키지는 data.frame이 주어 졌을 때 넘어지는 코드를 사용하는 경우가있을 수 있지만, data.table이러한 문제를 피하기 위해 지속적으로 유지 관리되고 있으므로 발생할 수있는 문제는 즉시 해결 될 것입니다.
예를 들면
v 1.8.2에 대한 뉴스에서
- base :: unname (DT)는 이제 plyr :: melt ()에 의해 필요에 따라 다시 작동합니다. 보고 해 주신 Christoph Jaeckel에게 감사드립니다. 테스트가 추가되었습니다.
- ITime에 대한 as.data.frame 메서드가 추가되어 ITime이 오류 # 1713없이 ggplot2에 전달 될 수 있습니다. 보고 해 주신 Farrel Buchinsky에게 감사드립니다. 테스트가 추가되었습니다. ITime 축 레이블은 자정부터 정수 초로 계속 표시됩니다. ggplot2가 ITime의 as.character 메소드를 호출하지 않는 이유를 모릅니다. ggplot2의 경우 ITime을 POSIXct로 변환하는 것이 한 가지 방법입니다.
'IT TIP' 카테고리의 다른 글
| 데이터베이스 / SQL : 경도 / 위도 데이터를 저장하는 방법은 무엇입니까? (0) | 2020.11.05 |
|---|---|
| C ++ 11 auto : 상수 참조를 얻는다면 어떨까요? (0) | 2020.11.05 |
| 문서 기반 데이터베이스와 관계형 데이터베이스의 장단점 (0) | 2020.11.05 |
| Vim에서 부드럽게 스크롤하는 가장 좋은 방법은 무엇입니까? (0) | 2020.11.05 |
| WebSocket 요청-응답 서브 프로토콜 (0) | 2020.11.05 |