我有一个列表要删除。我的问题是有些名称包含.
。如何防止取消列表使用.
作为分隔符?然后我想使用tstrsplit
来构建一个表。
library('data.table')
# without names with a . in the list everything is ok
to_unlist <- list('a1' = list('b' = 1, 'c' = 2),
'a2' = list('b' = 3, 'c' = 4),
'a3' = list('b' = 5, 'c' = 6))
to_unlist <- unlist(to_unlist)
table <- data.table(names = names(to_unlist), value = to_unlist)
table[, c('V1', 'V2') := tstrsplit(names, ".", fixed = TRUE)]
# with a name containing a .
to_unlist <- list('a1' = list('b' = 1, 'c' = 2),
'a2' = list('b' = 3, 'c' = 4),
'a3' = list('b.d' = 5, 'c' = 6))
to_unlist <- unlist(to_unlist)
table <- data.table(names = names(to_unlist), value = to_unlist)
# This gives an error
table[, c('V1', 'V2') := tstrsplit(names, ".", fixed = TRUE)]
# proper output should be
names value V1 V2
1: a1.b 1 a1 b
2: a1.c 2 a1 c
3: a2.b 3 a2 b
4: a2.c 4 a2 c
5: a3.b.d 5 a3 b.d
6: a3.c 6 a3 c
第5行是问题所在,我希望保留b.d
的值,但是因为我在.
分开,所以我不能这样做。
如何告诉unlist
使用与.
不同的分隔符?或者如何在列表中使用.
更改名称(我的实际列表来自json字符串,它是一个很长的嵌套列表)
我编辑了这个问题,希望现在更清楚了。
感谢您的帮助。
答案 0 :(得分:0)
我们可以在使用.
_
之后将unlist
更改为sub
,然后在_
中将sep指定为tstrsplit
table <- data.table(names = sub("[.]", "_", names(to_unlist)), value = to_unlist)
table[, c('V1', 'V2') := tstrsplit(names, "_", fixed = TRUE)]
或其他选项melt
可直接将list
转换为data.frame
as.data.table(melt(to_unlist))