Создание кадра данных из необработанного вектора - PullRequest
0 голосов
/ 22 января 2019

У меня есть запись необработанных векторов, как показано ниже.Настоящий необработанный вектор содержит более 50000 элементов.Ниже приведен краткий обзор того, как выглядят несколько элементов.Как вы можете видеть, трудно понять, где это начинается и где все это заканчивается.Что я знаю, так это то, что они получены из фрейма данных, который имеет 19 столбцов.

     1.1      1.2      1.3      1.4      1.5      1.6      1.7      1.8      1.9     1.10     1.11     1.12     1.13     1.14     1.15     1.16     1.17     1.18     1.19 
      ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       "" 
     2.1      2.2      2.3      2.5      2.6      2.7      2.8      2.9     2.10     2.12     2.13     2.14     2.15     2.16      3.1      3.2      3.3      3.5      3.6 
      ""       ""       ""       ""       ""       ""       ""       ""       ""       "" "9bbb59" "9bbb59"       ""       ""       ""       ""       ""       ""       "" 
     3.7      3.8      3.9     3.10     3.12     3.13     3.14     3.15     3.16      4.1      4.2      4.3      4.5      4.6      4.7      4.8      4.9     4.10     4.12 
      ""       ""       ""       ""       "" "9bbb59" "9bbb59"       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       "" 
    4.13     4.14     4.15     4.16      5.1      5.2      5.3      5.5      5.6      5.7      5.8      5.9     5.10     5.11     5.12     5.14     5.15     5.16     5.18 
"9bbb59" "9bbb59"       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       ""       "" 

Поэтому моя цель - отформатировать этот необработанный вектор в фрейм данных, который содержит 19 таких столбцов.

Col1  Col2  Col3  Col4  Col5  Col6  Col7  Col8  Col9  Col10  Col11  Col12  Col13      Col14    Col15  Col16  Col17  Col18  col19 
NA    NA     NA    NA    NA    NA    NA    NA    NA    NA     NA     NA      NA        NA        NA     NA     NA     NA      NA 
NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     NA     NA     "9bbb59"   "9bbb59"   NA     NA     NA     NA      NA
NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     NA     NA     "9bbb59"   "9bbb59"   NA     NA     NA     NA      NA 
NA    NA    NA    NA    NA    NA    NA    NA    NA    NA     NA     NA     "9bbb59"   "9bbb59"   NA     NA     NA     NA      NA
NA    NA     NA   NA    NA    NA    NA    NA    NA    NA     NA     NA      NA        NA         NA     NA     NA     NA      NA

Обратите внимание на пронумерованные строки 1.1, 2.3, 4.3 и т. Д. Первое число слева от точки указывает номер строки, второе число справа от точки указывает номер столбца.2.13 указывает на 2-ю строку или 2-е наблюдение и столбец 13.

Любая помощь в достижении этого очень ценится.

========= *

Примервышеуказанный необработанный вектор.

dat <- structure(c("", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"9bbb59", "9bbb59", "", "", "", "", "", "", "", "", "", "", "", 
"", "9bbb59", "9bbb59", "", "", "", "", "", "", "", "", "", "", 
"", "", "9bbb59", "9bbb59", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", ""), .Names = c("1.1", "1.2", "1.3", 
"1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10", "1.11", "1.12", 
"1.13", "1.14", "1.15", "1.16", "1.17", "1.18", "1.19", "2.1", 
"2.2", "2.3", "2.5", "2.6", "2.7", "2.8", "2.9", "2.10", "2.12", 
"2.13", "2.14", "2.15", "2.16", "3.1", "3.2", "3.3", "3.5", "3.6", 
"3.7", "3.8", "3.9", "3.10", "3.12", "3.13", "3.14", "3.15", 
"3.16", "4.1", "4.2", "4.3", "4.5", "4.6", "4.7", "4.8", "4.9", 
"4.10", "4.12", "4.13", "4.14", "4.15", "4.16", "5.1", "5.2", 
"5.3", "5.5", "5.6", "5.7", "5.8", "5.9", "5.10", "5.11", "5.12", 
"5.14", "5.15", "5.16", "5.18"))

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Первоначальная мысль - создать какой-то тип цикла. В зависимости от того, насколько динамичным вам это нужно, вы можете написать что-то вроде этого.

test = data.frame(Var1 = dat[grep("[1-9].1$", names(dat))],
                  Var2 = dat[grep("[1-9].2$", names(dat))],
                  Var13 = c(dat[grep("[1-9].13$", names(dat))], c("","","",""))[1:5])

# You need the concat for columns where there are less than 5 rows.  
0 голосов
/ 22 января 2019

Я бы сделал это:

vec <- c(1.1, "a", 1.2, "", 2.1, "", 2.2, "b") # in your case, your vector
mat <- matrix(vec,ncol = 2) # in your case, ncol = 19
mat <-mat[seq(2, nrow(mat), by = 2), ]  # we pick only the even columns
mat[mat==""] <- NA # transform "" into NA
mat <- as.data.frame(mat) # now we have a data.frame

Best!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...