由OP的回答來看, 「VAR」 是一個字符串,如:
var <- c("3, 4, 5", "2, 4, 5", "2, 4", "1, 4, 5")
如果是這樣的話,你可以考慮我的 「splitstackshape」 包cSplit_e
:
library(splitstackshape)
cSplit_e(data.frame(var), "var", ",", mode = "value", drop = TRUE)
# var_1 var_2 var_3 var_4 var_5
# 1 NA NA 3 4 5
# 2 NA 2 NA 4 5
# 3 NA 2 NA 4 NA
# 4 1 NA NA 4 5
如果它是list
,正如其他答案所假設的那樣,您可以使用支持cSplit_e
的「splitstackshape」中的(未導出)numMat
函數。
var <- list(c(3,4,5), c(2,4,5), c(2,4), c(1,4,5))
splitstackshape:::numMat(var, mode = "value")
# 1 2 3 4 5
# [1,] NA NA 3 4 5
# [2,] NA 2 NA 4 5
# [3,] NA 2 NA 4 NA
# [4,] 1 NA NA 4 5
引擎蓋下,numMat
是一個非常類似的方法,在@ thelatemail的回答中。
如果你有-99代表NA
和要排除他們,你可以嘗試:
var <- c("3, 4, 5", "2, -99, 4, 5", "2, 4", "1, 4, 5, -99")
splitstackshape:::numMat(
lapply(strsplit(var, ","), function(x) as.numeric(x)[as.numeric(x) > 0]),
mode = "value")
# 1 2 3 4 5
# [1,] NA NA 3 4 5
# [2,] NA 2 NA 4 5
# [3,] NA 2 NA 4 NA
# [4,] 1 NA NA 4 5
是'Var'一個'list'或'VECTOR'還是什麼?你的例子是不可重現的。它是'c(3,4,5,2,4,5,2,4,1,4,5)'還是'list(c(3,4,5),c(2,4,5), c(2,4),c(1,4,5))或c(「3,4,5,2,4,5,2,4 1,4,5」)'? – thelatemail