Subset data.table based on value in column of type list

放肆的年华 提交于 2020-01-25 03:15:36

问题


So I have this case currently of a data.table with one column of type list. This list can contain different values, NULL among other possible values. I tried to subset the data.table to keep only rows for which this column has the value NULL.

Behold... my attempts below (for the example I named the column "ColofTypeList"):

DT[is.null(ColofTypeList)]

It returns me an Empty data.table.
Then I tried:

DT[ColofTypeList == NULL] 

It returns the following error (I expected an error):

Error in .prepareFastSubset(isub = isub, x = x, enclos = parent.frame(),  : 
  RHS of == is length 0 which is not 1 or nrow (96). For robustness, no recycling is allowed (other than of length 1 RHS). Consider %in% instead.

(Just a precision my original data.table contains 96 rows, which is why the error message say such thing:

which is not 1 or nrow (96).

The number of rows is not the point).
Then I tried this:

DT[ColofTypeList == list(NULL)]

It returns the following error:

Error: comparison of these types is not implemented

I also tried to give a list of the same length than the length of the column, and got this same last error.

So my question is simple: What is the correct data.table way to subset the rows for which elements of this "ColofTypeList" are NULL ?

EDIT: here is a reproducible example

DT<-data.table(Random_stuff=c(1:9),ColofTypeList=rep(list(NULL,"hello",NULL),3))

Have fun!


回答1:


If it is a list, we can loop through the list and apply the is.null to return a logical vector

DT[unlist(lapply(ColofTypeList, is.null))]
#   ColofTypeList anotherCol
#1:                        3

Or another option is lengths

DT[lengths(ColofTypeList)==0]

data

DT <- data.table(ColofTypeList = list(0, 1:5, NULL, NA), anotherCol = 1:4)



回答2:


I have found another way that is also quite nice:

DT[lapply(ColofTypeList, is.null)==TRUE]

It is also important to mention that using isTRUE() doesn't work.



来源:https://stackoverflow.com/questions/59198204/subset-data-table-based-on-value-in-column-of-type-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!