Мы можем преобразовать каждую строку в запись формата DCF и затем прочитать ее, используя read.dcf
. Сначала прочитайте его в DF0
, а затем преобразуйте каждую строку в запись в формате DCF, получив v
. Затем прочитайте его, используя read.dcf
, измените порядок столбцов и преобразуйте их в числовые, получая числовую матрицу. Наконец, замените NA на 0. Пакеты не используются.
DF0 <- read.csv(text = Lines, as.is = TRUE)
v <- with(DF0, paste0("\nid:", id, "\nv2:", v2, chartr("{}=,", "\n :\n", class)))
v <- gsub(" ", "", v)
m <- read.dcf(textConnection(v))
nms <- c("id", "v2", sort(setdiff(colnames(m), c("id", "v2"))))
mm <- apply(m[, nms], 2, as.numeric)
mm[is.na(mm)] <- 0
mm
дает эту числовую матрицу:
id v2 0 1 2 3
[1,] 1 1 4.8 0.0 22.7 321.0
[2,] 2 1 0.0 11.2 929.5 1229.8
[3,] 3 2 0.0 28.8 50.9 0.0
Примечание
Ввод в воспроизводимом виде:
Lines <- 'id,v2,class
1,1,"{2=22.7, 0=4.8, 3=321}"
2,1,"{2=929.5, 1=11.2, 3=1229.8}"
3,2,"{2=50.9, 1=28.8}"'