数据文件中的多个标头以不同的行间隔排列

时间:2015-08-20 15:20:46

标签: r data-manipulation

我有一个数据表,但它在不同的行上有多个标题(第1行,第5行,第12行的标题相同),而不是固定的间隔。如何跳过这些标题行并使用一个标题创建我的新数据集?如果我能够识别这些文件并在单独的位置显示文件,那将会很有帮助。

1 个答案:

答案 0 :(得分:0)

有几种不同的选择,最好取决于您执行此操作的频率,数据的性质以及使用不同工具设置的技能。

上面的评论中提到的一个选项是使用单独的程序在将文件读入R之前过滤掉额外的标题行。这个想法的扩展是R具有pipe文件连接可用于运行外部命令,然后从输出中读取。例如,您可以尝试以下内容:

mydata <- read.table( pipe('perl -ne "print if /[0-9]/" mydata.txt') )

这将运行perl命令(您也可以使用grep或其他工具),它将一次一行地运行文件,并且只传递包含至少一个数字的那些(假设您的标题行不在&#39 ; t包含任何数字)然后由R中的read.table函数读取。您可能需要更复杂的命令来预处理数据。

另一种选择是只读取所有内容,然后删除那些包含头信息的行。我建议在读入时设置colClasses告诉R哪些列应该是数字等等(否则标题信息可能会导致R将所有内容读作字符串或因子)。然后,当读入标题行时,数字列将改为使用NA作为值,然后您可以快速查找数字列中具有NA的所有行并删除这些行(除非您有其他您想要的NA值保持)。

另一种选择是使用readLines函数将文件作为字符串读入,然后使用R grep或其他函数去除标题行,然后传递结果到read.table或其他阅读功能:

mylines <- readLines('mydata.txt')
mylines2 <- mylines[ !grepl('[a-zA-Z]', mylines), ]
mydata <- read.table(text=mylines2)

可能还有其他选项(以上内容需要针对您的具体情况进行调整),但这应该可以让您入门。