0
빈 목록이있는 행에 대해 data.table
의 목록 열로 필터링 할 수 있습니까? 예상 된 결과, 즉data.table 빈 값에 대한 필터 목록 열
library(data.table)
dt = data.table(a = c(1, 2, 3), b = list(c("A", "B"), character(0), c("C", "D", "E")))
> dt
a b
1: 1 1,2
2: 2
3: 3 1,2,3
는
> dt[filter(b)]
a b
1: 2
이 명백한 필터링 내가 올바른 부울 값을 초래할 수있는 함수를 정의 할 수있을 거라고 생각
> dt[length(b) == 0]
Empty data.table (0 rows) of 2 cols: a,b
> dt[length(b[[1]]) == 0]
Empty data.table (0 rows) of 2 cols: a,b
작동하지 않습니다이다 ,하지만 실제로 작동하게하려면 그룹을 사용해야하므로 필터 인수에서 작동하지 않습니다.
is_null_list = function(l) is.list(l) & length(l[[1]]) == 0
> dt[, is_null_list(b), a]
a V1
1: 1 FALSE
2: 2 TRUE
3: 3 FALSE
> dt[is_null_list(b)]
Empty data.table (0 rows) of 2 cols: a,b
더 일반적인 질문도 있습니다. data.table
목록 열에서 필터링을 수행 할 수 있습니까? 나는 그 대답이 당신이 목록으로 열쇠를 댈 수 없기 때문에 아니오라고 생각하지만, 물을만한 가치가 있다고 생각했습니다.
감사
'lengths (b)'를 원할 수도 있습니다. (끝 부분에's'을 적어 두십시오.) – Frank
굉장 + 완벽. 대답을 추가하면 받아 들일 것입니다. –
누구나 볼 수 있듯이'? lengths'에서리스트 열로 필터링하는 일반 버전은'dt [sapply (col, boo_func)] '와 같은 것을 알 수 있습니다. –