从原始向量创建数据框

时间:2019-01-21 22:20:28

标签: r dataframe

我在下面输入了原始向量的条目。实际的原始向量包含50,000多个元素。下面只是几个元素的外观快照。如您所见,很难解释这从哪里开始以及到哪里结束。我所知道的是,这些数据来自具有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指示第二行或第二观察值以及第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 :(得分:0)

我会这样做:

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

最好!

答案 1 :(得分:0)

最初的想法是创建某种类型的循环。根据您需要的动态程度,可以对这样的代码进行粗略的编码。

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.