0
空のリストを持つ行についてはdata.table
のリスト列でフィルタリングできますか?期待される結果が明らかにフィルタリングがdata.table空の値のフィルタリストの列
> 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
動作しない
> dt[filter(b)]
a b
1: 2
私は右のブール値をもたらすように関数を定義することができるかもしれないと思っている。すなわち
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
しかし、実際に動作させるためにグループを使用する必要があるので、それはフィルタ引数では機能しません。
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
とリスト列の各要素の長さによってフィルタリングすることができ
おかげ
「length(b)」が必要なのでしょうか? (最後に 's'に注意してください) – Frank
恐ろしい+完璧です。答えとして追加して受け入れます。 –
探している人には、 '?lengths'からリストカラムによるフィルタリングの一般的なバージョンは' dt [sapply(col、boo_func)] 'のようになることが明らかになりました。 –