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
列表列上進行任何過濾嗎?我懷疑答案是否定的,因爲你不能列出清單,但認爲這值得提問。
由於
也許你想'長度(b)'? (注意'''結尾。) – Frank
真棒+完美。添加爲答案,我會接受。 –
對於任何人來說,從'?長度'顯而易見的是,按列表過濾的通用版本將會像'dt [sapply(col,boo_func)]'一樣。 –