【发布时间】:2020-02-26 01:14:48
【问题描述】:
我有一个带有list 列“c”的data.table:
df <- data.table(a = 1:3, c = list(1L, 1:2, 1:3))
df
a c
1: 1 1
2: 2 1,2
3: 3 1,2,3
我想为“c”中的值创建单独的列。
我创建了一组新列 F_1、F_2、F_3:
mmax <- max(df$a)
flux <- paste("F", 1:mmax, sep = "_")
df[, (flux) := 0]
df
a c F_1 F_2 F_3
1: 1 1 0 0 0
2: 2 1,2 0 0 0
3: 3 1,2,3 0 0 0
我想将“c”中的值分派到列 F_1、F_2、F_3,如下所示:
df
a c F_1 F_2 F_3
1: 1 1 1 0 0
2: 2 1,2 1 2 0
3: 3 1,2,3 1 2 3
我尝试过的:
comp_vect <- function(vec, mmax){
vec <- vec %>% unlist()
n <- length(vec)
answr <- c(vec, rep(0, l = mmax -n))
}
df[ , ..flux := mapply(comp_vect, c, mmax)]
预期的data.table是:
> df
a c F_1 F_2 F_3
1: 1 1 1 0 0
2: 2 1,2 1 2 0
3: 3 1,2,3 1 2 3
【问题讨论】:
-
d[ , (cols) := transpose(c, fill = 0)] -
@Henrik 您不应该将此作为答案发布吗?
df[, paste("F_", 1:3) := transpose(d, fill = 0L)] -
您也可以使用
lengths来确定要创建的列名的数量;paste0("f_", seq_len(max(lengths(df$c))))
标签: r list data.table