programing

data.table로 할 수 없는 data.frame으로 할 수 있는 작업?

mailnote 2023. 9. 28. 08:39
반응형

data.table로 할 수 없는 data.frame으로 할 수 있는 작업?

저는 방금 R을 사용하기 시작했는데, data.table을 발견했습니다.훌륭하다고 생각했습니다.

매우 순진한 질문: data.frame을 무시하고 data.table을 사용하여 두 패키지 간의 구문 혼란을 방지할 수 있습니까?

data.table FAQ에서

FAQ 1.8 OK, data.table이 무엇에 관한 것인지 알아보기 시작했는데, 왜 data.frame을 R에서 향상시키지 않았습니까?왜 그것이 새 소포여야만 합니까?

FAQ 1.1 하이라이트로,j인에[.data.table와 근본적으로 다릅니다.j인에[.data.frame. 아주 간단한 것이라도DF[,1]많은 패키지와 사용자 코드에서 기존 코드를 깰 것입니다.이것은 설계에 의한 것이며, 우리는 이것이 더 복잡한 구문을 작동시키기 위해 이런 식으로 작동하기를 원합니다.다른 차이점도 있습니다(FAQ 2.17 참조).

더 나아가,data.table에서 물려받음data.frame. 그것은.data.frame, 나도. Adata.table오직 수락하는 모든 패키지로 전달될 수속만 가능합니다.data.frame그리고 그 소포는 사용할 수 있습니다.[.data.frame의 구문data.table.

우리는 R에 대해서도 가능한 한 개선할 것을 제안했습니다.이 중 하나가 R 2.12.0의 새로운 기능으로 승인되었습니다.

unique()그리고.match()이제 모든 요소가 전역에 있는 문자 벡터에서 더 빠릅니다.CHARSXP캐시하고 표시되지 않은 인코딩(ASCII)을 가집니다.해시 코드가 생성되는 방법에 대한 개선점을 제시해 준 Matthew Dowle에게 감사드립니다.unique.c.

두 번째 제안은 다음과 같은 것이었습니다.memcpy인에duplicate.c, C의 루프보다 훨씬 빠릅니다.이렇게 하면 R이 내부적으로 데이터를 복사하는 방식이 13배 향상됩니다.r-devel의 스레드는 다음과 같습니다. http://tolstoy.newcastle.edu.au/R/e10/devel/10/04/0148.html .

다음 중 구문의 차이가 작은 것은 무엇입니까?data.frame데이터.표

  • DT[3]세 번째 을 가리켰지만,DF[3]3열을 참조합니다.
  • DT[3, ] == DT[3],그렇지만DF[ , 3] == DF[3](data.frame에서는 somewhat이 혼동되지만 data.table은 일관됨)
  • 이러한 이유로 우리는 쉼표가 선택 사항이라고 말합니다.DT, 에서 선택사항은 아닙니다.DF
  • DT[[3]] == DF[, 3] == DF[[3]]
  • DT[i, ],어디에i는 단일 정수이며 단일 행을 반환합니다.DF[i, ], 그러나 벡터를 반환하는 행렬 단일 행 부분 집합과는 다릅니다.
  • DT[ , j]어디에jis 단일 정수는 1열 데이터를 반환합니다.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]합니다의 전체 합니다.DFgNA내내. 가.NAlogical서 랜드됩니다에 됩니다.[.data.frame는 . 입니다.DF[NA_integer_].[.data.table편의를 위해 자동으로 이 가능한 의도로 전환됩니다.
  • DT[c(TRUE, NA, FALSE)]하다,료를 합니다.NA~하듯이FALSE,그렇지만DF[c(TRUE, NA, FALSE)]sNA의 행NA
  • DT[ColA == ColB]다보다 .DF[!is.na(ColA) & !is.na(ColB) & ColA == ColB, ]
  • data.frame(list(1:2, "k", 1:4))의 열,은 1개의 하고, data.table합니다를 .list기둥.
  • check.names입니다.TRUE인에data.frame그렇지만FALSE데이터.표에 기재되어 있습니다.
  • stringsAsFactors입니다.TRUE인에data.frame그렇지만FALSE효율성을 위해 data.table로 입력합니다.이며 더 이상가 R다하는 성능 .factor.
  • list를 사용하여 할 때 됩니다.", "인에data.frame,그렇지만","data.table에서 6번째 항목 뒤에 후행 쉼표가 있어 큰 내장 객체의 실수 인쇄를 방지할 수 있습니다.[.data.frame우리는 매우 자주 설정합니다.drop = FALSE가 잊어버렸을 하고 단일 이 아닌 벡터가 갑자기 할 수 . , .data.frame. 인.[.data.table을 일관되게 를 잡았고다,를 떨어뜨렸습니다.drop되면 해당 는 이러한 고려하지 data.table이 data.table-unwareness 패키지로 전달되면 해당 패키지는 이러한 차이점과 관련이 없으며, 단지 작동할 뿐입니다.

작은주의사항

는 data.frame이 인 할 때 수 .data.table이러한 문제를 방지하기 위해 지속적으로 유지 관리되고 있으며, 발생할 수 있는 문제는 즉시 해결됩니다.

예를들면

  • base::unname(DT)는 이제 plyr::melt()에서 필요에 따라 다시 작동합니다.보도해주신 크리스토프 제이켈씨께 감사드립니다.테스트 추가.
  • ITime에 대해 as.data.frame 메서드가 추가되어 오류 없이 ggplot2에 ITime을 전달할 수 있습니다. #1713.보도해주신 패럴 부킨스키 씨께 감사드립니다.테스트 추가.ITime 축 레이블은 자정부터 정수 초로 계속 표시됩니다. ggplot2가 ITime의 as.character 메서드를 호출하지 않는 이유를 알 수 없습니다.ggplot2에 대해 IT 시간을 POSIXct로 변환하는 것이 하나의 접근법입니다.

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

반응형