R:将字符向量解析为数据帧

时间:2014-04-14 03:39:14

标签: r parsing dataframe

我使用readlines()从一个文件导入一个字符向量,每个文件有近200行。 第一行的第一列是“H” 第二行的第一列是“R” 第三行的第一列是“S”

我想将行解析为数据框。 dfH,dfR和dfS每行的第一列确定该行所属的df。

一旦我可以从数据中删除\只是csv,每行都有自己的引号集。

每个数据框的列名和数据类型是固定且已知的

[1] "\"H\",\"USA\",\"AQU\",\"20080301\",\"9\",\"D\",\"Antique\""

[2] "\"R\",\"1\",\"TB\",\"ALW\",\"S\",\" \",\"4U\",\" \",\"47000\",\"0\",\"47000\",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\"0\",\"0\",\" \",\"800\",\"F\",\"D\",\"N\",\"8\",\" \",\" \",\" \",\"12:30PM\",\"12:58PM\",\"1230\",\" \",\"Alw 47000N1X\",\"Fast\",\"\",\"19\",\"76\",\" \",\"\",\"\",\"44\",\"140.84\",\"2341\",\"4765\",\"11372\",\"0\",\"0\",\" \",\"\",\"217217\",\"Good\",\"Clear\",\"\",\"\",\"Y\""                                                                                                                                                                                                                                                                                                                                                                                 

[3] "\"S\",\"1\",\"000007168997TB\",\"Oak\",\"20040411\",\"NY\",\"TB\""

1 个答案:

答案 0 :(得分:1)

听起来你希望每个以H开头的字符串都是dfH中的一行,每个字符串以R开头为dfR中的一行,每个字符串以S开头成为dfS中的一行。让我们首先将您的示例数据加倍,这样在这三个结果数据帧的每一行中都会有两行:

dat = rep(c("\"H\",\"USA\",\"AQU\",\"20080301\",\"9\",\"D\",\"Antique\"", "\"R\",\"1\",\"TB\",\"ALW\",\"S\",\" \",\"4U\",\" \",\"47000\",\"0\",\"47000\",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\" \",\"0\",\"0\",\"0\",\" \",\"800\",\"F\",\"D\",\"N\",\"8\",\" \",\" \",\" \",\"12:30PM\",\"12:58PM\",\"1230\",\" \",\"Alw 47000N1X\",\"Fast\",\"\",\"19\",\"76\",\" \",\"\",\"\",\"44\",\"140.84\",\"2341\",\"4765\",\"11372\",\"0\",\"0\",\" \",\"\",\"217217\",\"Good\",\"Clear\",\"\",\"\",\"Y\"", "\"S\",\"1\",\"000007168997TB\",\"Oak\",\"20040411\",\"NY\",\"TB\""), 2)

现在我们可以应用read.csv将每个字符串值转换为数据框,并rbind来构建您的三个数据框:

dfs <- lapply(dat, function(x) read.csv(text=x, header=F))
first.char <- unlist(lapply(dfs, `[`, 1, 1))
dfH <- do.call(rbind, dfs[first.char == "H"])
dfR <- do.call(rbind, dfs[first.char == "R"])
dfS <- do.call(rbind, dfs[first.char == "S"])
dfH
#   V1  V2  V3       V4 V5 V6      V7
# 1  H USA AQU 20080301  9  D Antique
# 2  H USA AQU 20080301  9  D Antique
相关问题