我使用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\""
答案 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