使用R中的read.csv跳过特定行

时间:2016-08-23 21:13:22

标签: r read.csv

我希望在将文件导入R中的数据框时跳过我的csv文件的第1行和第3行。

在原始文件中,我的标题位于第2行。

使用read.csv中的skip参数我可以跳过第1行并将header参数设置为TRUE,我仍然在数据框中的原始文件中有第3行。

任何人都可以建议如何跳过R中的多个特定行,下面是我能够拼凑到一起的吗?

我可以将一个向量传递给skip参数,指定要忽略的确切行吗?

prach <- read.csv("RSRAN104_-_PRACH_Propagation_Delay-PLMN-day-rsran_RU50EP1_reports_RSRAN104_xml-2016_08_23-21_33_03__604.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE, skip = 1)

2 个答案:

答案 0 :(得分:40)

一种方法是使用两个read.csv命令,第一个读取标题,第二个读取数据:

headers = read.csv(file, skip = 1, header = F, nrows = 1, as.is = T)
df = read.csv(file, skip = 3, header = F)
colnames(df)= headers

我已经创建了以下文本文件来测试它:

do not read
a,b,c
previous line are headers
1,2,3
4,5,6

结果是:

> df
  a b c
1 1 2 3
2 4 5 6

答案 1 :(得分:0)

我完美的解决方案:

#' read csv table, wrapper of \code{\link{read.csv}}
#' @description read csv table, wrapper of \code{\link{read.csv}}
#' @param tolower whether to convert all column names to lower case
#' @param skip.rows rows to skip (1 based) before read in, eg 1:3
#' @return returns a data frame
#' @export
ez.read = function(file, ..., skip.rows=NULL, tolower=FALSE){
    if (!is.null(skip.rows)) {
        tmp = readLines(file)
        tmp = tmp[-(skip.rows)]
        tmpFile = tempfile()
        on.exit(unlink(tmpFile))
        writeLines(tmp,tmpFile)
        file = tmpFile
    }
    result = read.csv(file, ...)
    if (tolower) names(result) = tolower(names(result))
    return(result)
}