由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