簡體   English   中英

取消列出data.table中的嵌套列表列

[英]Unlist nested list columns in data.table

取消列出data.table中的嵌套列表列。 假設所有列表元素都是相同的類型。 列表元素已命名,名稱也必須處理。
它在某種程度上與data.table聚合到列表列的操作相反。
我認為值得在SO 知識庫中使用它。
我目前的解決方法方法如下,我正在尋找更多的規范答案。

library(data.table)
dt <- data.table(
    a = letters[1:3], 
    l = list(list(c1=6L, c2=4L), list(x=2L, y=4L, z=3L), list())
)
dt[]
#    a      l
# 1: a <list>
# 2: b <list>
# 3: c <list>
dt[,.(a = rep(a,length(l)),
      nm = names(unlist(l)),
      ul = unlist(l)),
   .(id = seq_along(a))
   ][, id := NULL
     ][]
#    a nm ul
# 1: a c1  6
# 2: a c2  4
# 3: b  x  2
# 4: b  y  4
# 5: b  z  3
# 6: c NA NA

不確定它是更“規范”但是這里是一種修改l的方法,所以你可以使用by=a ,考慮到你知道列表中數據的類型(有了一些改進,感謝@DavidArenburg):

dt[lengths(l) == 0, l := NA_integer_][, .(nm = names(unlist(l)), ul = unlist(l)), by = a]

#   a nm ul
#1: a c1  6
#2: a c2  4
#3: b  x  2
#4: b  y  4
#5: b  z  3
#6: c NA NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM