我有一个数据表,但它在不同的行上有多个标题(第1行,第5行,第12行的标题相同),而不是固定的间隔。如何跳过这些标题行并使用一个标题创建我的新数据集?如果我能够识别这些文件并在单独的位置显示文件,那将会很有帮助。
答案 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)
可能还有其他选项(以上内容需要针对您的具体情况进行调整),但这应该可以让您入门。