我有一个带有list
列“c”的数据表:
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)]
- Henrikdf[, paste("F_", 1:3) := transpose(d, fill = 0L)]
- s_baldurlengths
来确定要创建的列名数量;paste0("f_", seq_len(max(lengths(df$c))))
- Henrik