IT TIP

data.table로 할 수없는 data.frame으로 무엇을 할 수 있습니까?

itqueen 2020. 11. 5. 19:58
반응형

data.table로 할 수없는 data.frame으로 무엇을 할 수 있습니까?


방금 R을 사용하기 시작했고 data.table을 발견했습니다. 나는 그것이 훌륭하다는 것을 알았다.

매우 순진한 질문 : 두 패키지 간의 구문 혼동을 피하기 위해 data.table을 사용하기 위해 data.frame을 무시할 수 있습니까?


로부터 data.table 자주 묻는 질문

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되지 않는 옵션에 있지만,DF
  • DT[[3]] == DF[, 3] == DF[[3]]
  • DT[i, ], 여기서는 i단일 정수이고는와 같이 단일 행 DF[i, ]을 반환하지만 벡터를 반환하는 행렬 단일 행 하위 집합과는 다릅니다.
  • DT[ , j]여기서는 j단일 정수가 1 열 data.table DF[, 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. 기호 NAlogicalR의 유형 이므로에서 재활용됩니다 [.data.frame. 사용자의 의도는 아마도 DF[NA_integer_]. [.data.table편의를 위해이 가능한 의도로 자동 전환됩니다.
  • DT[c(TRUE, NA, FALSE)]처리 NAFALSE하지만, DF[c(TRUE, NA, FALSE)]반환 NA각 행NA
  • DT[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이러한 문제를 피하기 위해 지속적으로 유지 관리되고 있으므로 발생할 수있는 문제는 즉시 해결 될 것입니다.

예를 들면

  • base :: unname (DT)는 이제 plyr :: melt ()에 의해 필요에 따라 다시 작동합니다. 보고 해 주신 Christoph Jaeckel에게 감사드립니다. 테스트가 추가되었습니다.
  • ITime에 대한 as.data.frame 메서드가 추가되어 ITime이 오류 # 1713없이 ggplot2에 전달 될 수 있습니다. 보고 해 주신 Farrel Buchinsky에게 감사드립니다. 테스트가 추가되었습니다. ITime 축 레이블은 자정부터 정수 초로 계속 표시됩니다. ggplot2가 ITime의 as.character 메소드를 호출하지 않는 이유를 모릅니다. ggplot2의 경우 ITime을 POSIXct로 변환하는 것이 한 가지 방법입니다.

참고 URL : https://stackoverflow.com/questions/13618488/what-you-can-do-with-a-data-frame-that-you-cant-with-a-data-table

반응형