2016-08-01 4 views
1
dt = data.table(x = c(1,1,2,2,2,2,3,3,3,3)) 
dt[, y := if(.N > 2) .N else NA, by = x] # fail 
dt[, y := if(.N > 2) .N else NA_integer_, by = x] # good 

NA에 유형이 있고 정수가 아니기 때문에 첫 번째 그룹화가 실패합니다. 데이터 테이블에이를 무시하고 일관성을 유지하는 모든 유형을 만들기 위해 모든 NAs를 만들도록 지시하는 방법이 있습니까?R data.table NA 유형 일관성

여기서 수동으로 NA_integer을 설정할 수 있지만 다른 유형의 열이 많으면 모든 NA 유형을 올바르게 설정하기가 어렵습니다.

현재 날짜/IDate/ITime에는 어떤 유형의 NA를 사용해야합니까?

+0

@RichardScriven 두 번째 작품은 확실합니다. RStudio를 사용하고 있습니까? RStuidio는 새 명령을 성공적으로 실행할 때 이전 오류 메시지가 계속 표시되는 경우가 있습니다. – jf328

+0

@RichardScriven 오, 왜 그런지 알 겠어. 두 개를 순서대로 실행하지 마십시오. 실패한 명령은 실제로 테이블을 변경합니다 – jf328

+0

"x"컬럼은 "정수"가 아닙니다 -'.N' 때문에 "정수"가 필요합니다. 따라서'.N'을 리턴 값으로 사용하면 하드 코드 'NA_integer_'는 다른'typeof'에 대한 것입니다. 다른 경우에는 반환 값 (여기서는'NA')의'storage.mode'를 적절한 타입으로 설정하십시오. –

답변

3

OP의 첫 번째 질문 :는 그것을 무시하고 일관성을 유지 어떤 형식으로 모든 NAS를 만들려고 노력 데이터 테이블을 알 수있는 방법이 있습니까?

아니요 할당하지 않고 유사한 오류가 나타납니다 : 제 생각에는

dt[, if(.N > 2) .N else NA, by = x] 
# Error in `[.data.table`(dt, , if (.N > 2) .N else NA, by = x) : 
# Column 1 of result for group 2 is type 'integer' but expecting type 'logical'. Column types must be consistent for each group. 

는,이 "열 유형이 각 그룹에 대해 일치해야합니다." 귀하의 경우에도 메시지가 표시되어야합니다.


영업 이익의 두 번째 질문 : BTW, 내가 날짜/IDATE/ITime에 사용해야 어떤 NA 형? IDATE 등의 알에 대한

은, 난 항상 길이 하나 NA 조각을 줄 것으로 보인다 NA_integer_, 예를 들어, as.IDate(Sys.Date())[NA_integer_]에 의해 부분 집합. 그게 하나의 해야하는지 모르겠지만 더 좋은 생각을 모르겠다. 삽화 :

z = IDateTime(factor(Sys.time())) 
#   idate itime 
# 1: 2016-08-01 16:05:25 

str(lapply(z, function(x) x[NA_integer_])) 
# List of 2 
# $ idate: IDate[1:1], format: NA 
# $ itime:Class 'ITime' int NA 
+0

IDime에 대한 서브 타임 방식은 작동하지 않습니다. IDATE – jf328

+0

@ jf328 필자는 필자가 사용하는 방식과 "작동하는"느낌을 보여주는 예를 편집했습니다. 당신은 더 구체적 일 수 있습니까? 나에게 클래스 속성이 보존되면 충분하다. – Frank

+0

'as.ITime ("00:00:01") [NA_integer_]'오류 - data.table 문제가 발생합니다. – jf328