這是我在這裏學到的Stack Overflow的一個技巧(我的代碼段說我從@BenBolker學到了它,但我現在找不到這個鏈接),但是隻有當你的數據在您描述的格式:文本後面跟數字。
比方說,我們有以下文字:
TEXT <- c(
"Robert De Niro 382 +19 2504 14 346 +16 2445 18 2413 +20 2445 17",
"Marlon Brando 2427 +13 2495 19 2483 +14 2429 16 2438 +18 2378 20",
"Martin Scorsese 2501 7 317 +3 2491 1 393 +2 2462 4 394 +9")
我們可以使用gsub
來代替空間與另一個字符的話 - 比如下劃線或破折號:
gsub(" +([[:alpha:]]+)", "_\\1", TEXT)
# [1] "Robert_De_Niro 382 +19 2504 14 346 +16 2445 18 2413 +20 2445 17"
# [2] "Marlon_Brando 2427 +13 2495 19 2483 +14 2429 16 2438 +18 2378 20"
# [3] "Martin_Scorsese 2501 7 317 +3 2491 1 393 +2 2462 4 394 +9"
這將允許我們直接使用read.table
:
read.table(text = gsub(" +([[:alpha:]]+)", "_\\1", text), header = FALSE)
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13
# 1 Robert_De_Niro 382 19 2504 14 346 16 2445 18 2413 20 2445 17
# 2 Marlon_Brando 2427 13 2495 19 2483 14 2429 16 2438 18 2378 20
# 3 Martin_Scorsese 2501 7 317 3 2491 1 393 2 2462 4 394 9
作爲@BondedDust提到,如果你想在數字前面加「+」,你可以指定colClasses = "character"
,但是你的數字將會是字符:-)
你可以使用'readLines(...,n = 3)讀取文件的前幾行。然後,您可以嘗試基於此做出決定。我想不出一種可以在任何情況下都能正常工作的算法,所以這取決於這些文件如何相似以確定中斷應該在哪裏。如果唯一認爲可變的是4/3對的數量,則應該可以通過第一行中的字符數來判斷。 – MrFlick
我看不出有什麼理由爲什麼'read.table'不起作用。它忽略了多餘的空白。 –
@BonddedDust問題是名稱中的空格,不是? – MrFlick