在R中使用read.csv跳过特定行
在将csv文件导入R中的数据框时,我希望跳过csv文件的第一行和第三行 在原始文件中,我的标题位于第2行 使用read.csv中的skip参数,我可以跳过第一行并将header参数设置为TRUE,因为我的数据帧中仍然有原始文件的第三行 有人能建议如何跳过R中的多个特定行吗?下面是我能够拼凑起来的内容 我可以向skip参数传递一个向量,指定要忽略的确切行吗在R中使用read.csv跳过特定行,r,read.csv,R,Read.csv,在将csv文件导入R中的数据框时,我希望跳过csv文件的第一行和第三行 在原始文件中,我的标题位于第2行 使用read.csv中的skip参数,我可以跳过第一行并将header参数设置为TRUE,因为我的数据帧中仍然有原始文件的第三行 有人能建议如何跳过R中的多个特定行吗?下面是我能够拼凑起来的内容 我可以向skip参数传递一个向量,指定要忽略的确切行吗 prach <- read.csv("RSRAN104_-_PRACH_Propagation_Delay-PLMN-day-rsran
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)
prach一种方法是使用两个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
我的完美解决方案:
#' 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)
}
我很想看看其他人怎么说,但是如果第1行和第3行不是空的,你可能需要跳过所有3行,手动管理你的标题名。如果你不介意手动修改你的文件,你可以在第3行添加一个注释字符,比如。
,然后执行:read.csv(file,skip=1,header=t,comment.char=“#”)
。为什么不跳过第一行,从第2行开始读取csv(包括标题),并在读取.csv()后删除第三行?相关帖子:这解决了一个棘手的问题,我需要跳过文件底部带有元数据的ascii文件和需要跳过的标题。我喜欢在使用函数时也可以将命令传递给read.csv。我用过:测试我很高兴它有帮助!