首页 > 解决方案 > 如何将 data.table 列的值列表绑定为额外的行

问题描述

我有一个与 R data.table 相关的问题。在我的表中,一列 ('b') 可以包含多个值。对于每个逗号分隔的值,我想在数据表中有一个额外的行,旁边是列“a”的值。

# begin format data
d= data.table(a=c(1:3), b = c('a','b','c,d'))
# end format data
d2= data.table(a=c(1:3,3), b = c('a','b','c','d'))

我已经开始分离 b 列并将其存储为列表,但无法弄清楚如何获取最终的最终格式数据。

d[,b2:= strsplit(b, ",")]              

非常感谢任何帮助

标签: rdata.table

解决方案


最终,这确实是如何操作 data.table 中的 data.frame 的骗局,尽管由https://github.com/Rdatatable/data.table/issues/2146https://github.com/Rdatatable/告知数据表/问题/3672

长话短说,通用的“正确方式”很可能

tidyr::unnest(d[, b := strsplit(b, ",")], b)
# # A tibble: 4 x 2
#       a b    
#   <int> <chr>
# 1     1 a    
# 2     2 b    
# 3     3 c    
# 4     3 d    

尽管您可以使用这些数据来解决它

d[, b := strsplit(b, ",")
  ][, setnames(do.call(data.frame, .SD), names(d)), by = seq_len(nrow(d))
  ][,-1]
#        a      b
#    <int> <char>
# 1:     1      a
# 2:     2      b
# 3:     3      c
# 4:     3      d

推荐阅读