Rのデータフレームにファイルをインポートするときに、csvファイルの1行目と3行目をスキップしたい.
元のファイルでは、ヘッダーは2行目にあります。
Read.csvでskip引数を使用すると、データフレームに元のファイルの3行目が残っているため、1行目をスキップしてヘッダー引数をTRUEに設定できます。
Rの複数の特定の行をスキップする方法を提案できる人はいますか?
無視する正確な行を指定して、スキップ引数にベクトルを渡すことはできますか?
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)
これを行う1つの方法は、2つのread.csv
コマンド、最初のものはヘッダーを読み取り、2番目のものはデータを読み取ります。
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)
}