簡體   English   中英

R-我的第一行的列名稱中有#個字符?

[英]R- my first row has # character in the column names?

我的測試文件格式很奇怪。 第一行以:

在此處輸入圖片說明 如果我忽略第一行並通過使用read.table導入數據,則效果很好,但是我沒有列名。 但是,如果我嘗試使用col.names = TRUE導入數據,則會顯示“ 列多於列名 ”。 我想我可以分別導入第一行和其余數據,並將第一行(即列名)添加到最終輸出文件中。 但是,當我導入第一行時:它完全忽略了列名,並跳轉到0 0 0 0的行。是因為第一行具有#字符。 而且由於#字符,數據中還有一個額外的空列。

這里有幾種可能性:

1)處理兩次使用readLines將其作為行L的字符向量讀入。 然后刪除#並使用read.table讀取L

L <- sub("#", "", readLines("myfile.dat"))
read.table(text = L, header = TRUE)

2)分別讀取標頭對於較小的文件,以前的方法比較短,應該可以,但是如果文件較大,則可能不希望對其進行兩次處理。 在這種情況下,請使用readLines僅讀入標題行,對其進行修復,然后再應用列名讀取其余部分。

File <- "myfile.dat"
col.names <- scan(text = readLines(File, 1), what = "", quiet = TRUE)[-1]
read.table(File, col.names = col.names)

3)管道另一種方法是利用外部命令:

File <- "myfile.dat"
cmd <- paste("sed -e 1s/.//", File)
read.table(pipe(cmd), header = TRUE)

在類似UNIX的系統上, sed應該可用。 在Windows上,您將需要安裝Rtools並確保sed位於PATH上,或者使用文件的路徑:

cmd <- paste("C:/Rtools/bin/sed -e 1s/.//", File)
read.table(pipe(cmd), header = TRUE)

一種方法是只對第一行進行一次單獨的讀取,以嗅出列名。 然后,像以前一樣做一個read.table ,並跳過第一行。

f <- "path/to/yourfile.csv"
con <- file(f, "r")
header <- readLines(con, n=1)
close(con)

df <- read.table(f, header=FALSE, sep = " ", skip=1)   # skip the first line
names(df) <- strsplit(header, "\\s+")[[1]][-1]         # assign column names

但是,我不喜歡這種方法,而是希望您修復平面文件的源, 以免包含麻煩的#符號。 另外,如果您只需要一次性完成此要求,則還可以手動編輯平面文件以刪除#符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM