【发布时间】:2018-08-12 22:54:01
【问题描述】:
我从大约 20 年前的一个项目中获得了一系列冗长的文本文件(必须从软盘导入它们!)。原始软件使用 FORTRAN 并且可以直接读取文件,但我想在 R 中进行更有效的操作。当我将文件读入 R 时,您会得到与创建以下数据框类似的内容:
dataset <-
as.data.frame(c("R4 8561 200 365801HARLAN 16161616116616166116",
"R5 8533 100 472801WHITE 11611111111111111111",
"R4 8573 100 485101MCKENNA 11611161161111611161",
"R6 8513 200 489801HOLMES 66116111611161111161",
"R4 8522 200 492201DAY 11111611111111116111",
"R6 8548 100 500901LURTON 11116111911161111111",
"R5 8547 100 507322HUGHES 16611111111161116611",
"R4 85 3 100 518001VANDEVANTER99999911111111111111",
"R5 8553 100 521301LAMAR 99999911111111111111",
1910))
这应该以 10 x 1 数据帧开始。我正在努力做以下事情:
(1) 删除数据集的最后一行,无论数据集有多长。当我做类似 dataset
(2) 将每个单元格中的所有内容放在名称之前。名称总是以 21 个字符开头;
(3) 一旦有了这个,我想将名称(总是 11 个字符长,如果需要包括空格)与数字(代表一系列投票)分开;
(4) 一旦我有了它,将数字分成单个单元格(始终为 1、6 或 9)。数字的长度因文件而异。
非常感谢任何帮助。
【问题讨论】:
-
1) 只需使用
data.frame而不是as.data.frame作为您的样本数据。 -
2) 你的
dataset已经是一个因素,[-nrow, ]不会改变它。而是先转换为as.character -
如果我可能会问:如果我在转换为字符之前尝试删除最后一行,为什么 R 会获取数据帧并将其转换为字符串?再次感谢您。
-
R 也有一个
read.fortran函数 - 如果你知道 FORTRAN 输入参数,请参见这里的一个旧示例问题 - stackoverflow.com/questions/28490171/… 除此之外,这应该可以作为read.fwf调用如果您指定所有列的宽度 - stackoverflow.com/a/41819624/496803
标签: r dataframe data-manipulation