这里tidyverse 的经验不足,所以这是我使用data.table 的解决方案。我在步骤和结果之间包含了所有内容,以显示发生了什么......
library( data.table )
#create sample data
DT <- fread("Col_A Col_B Col_C
[0.1,0.5,0.7] [1.54E12, 1.54E12, 1.54E12] [1, 3, 4, 5]")
# Col_A Col_B Col_C
# 1: [0.1,0.5,0.7] [1.54E12, 1.54E12, 1.54E12] [1, 3, 4, 5]
#melt to long format
ans <- melt( DT, measure.vars = names(DT), variable.factor = FALSE )
# variable value
# 1: Col_A [0.1,0.5,0.7]
# 2: Col_B [1.54E12, 1.54E12, 1.54E12]
# 3: Col_C [1, 3, 4, 5]
#remove [] and split the value column using ', ' as sepatator
ans[, value := gsub( "\\[|\\]", "", value ) ]
ans[, paste0( "v", 1:length( tstrsplit(ans$value, "," ) ) ) :=
lapply( tstrsplit(value, "," ), as.numeric ) ][]
# variable value v1 v2 v3 v4
# 1: Col_A 0.1,0.5,0.7 1.00e-01 5.00e-01 7.00e-01 NA
# 2: Col_B 1.54E12, 1.54E12, 1.54E12 1.54e+12 1.54e+12 1.54e+12 NA
# 3: Col_C 1, 3, 4, 5 1.00e+00 3.00e+00 4.00e+00 5
#transpose (without value-columns) to get wide format again
transpose( ans[, -"value"], make.names = "variable" )
# Col_A Col_B Col_C
# 1: 0.1 1.54e+12 1
# 2: 0.5 1.54e+12 3
# 3: 0.7 1.54e+12 4
# 4: NA NA 5