テーマのバリエーション...しかし、最初に、いくつかのサンプルデータ:
cat("1 NEW YORK 7,262,700",
"2 LOS ANGELES 3,259,340",
"3 CHICAGO 3,009,530",
"4 HOUSTON 1,728,910",
"5 PHILADELPHIA 1,642,900",
"6 DETROIT 1,086,220",
"7 SAN DIEGO 1,015,190",
"8 DALLAS 1,003,520",
"9 SAN ANTONIO 914,350",
"10 PHOENIX 894,070", sep = "\n", file = "test.txt")
ステップ 1 : データを読み込むreadLines
x <- readLines("test.txt")
ステップ 2 : 区切り記号の挿入に使用できる正規表現を見つけます。ここで、パターンは (行末から見ると) 数字とコンマのセットのように見え、その前にスペースがあり、その前にすべて大文字の単語が続きます。これらのグループをキャプチャして、いくつかの「タブ」区切り文字 (\t
) を挿入できます。余分なスラッシュは、それらを適切にエスケープするためのものです。
gsub("([A-Z ]+)(\\s?[0-9,]+$)", "\\\t\\1\\\t\\2", x)
# [1] "1\t NEW YORK \t7,262,700" "2\t LOS ANGELES \t3,259,340"
# [3] "3\t CHICAGO \t3,009,530" "4\t HOUSTON \t1,728,910"
# [5] "5\t PHILADELPHIA \t1,642,900" "6\t DETROIT \t1,086,220"
# [7] "7\t SAN DIEGO \t1,015,190" "8\t DALLAS \t1,003,520"
# [9] "9\t SAN ANTONIO \t914,350" "10\t PHOENIX \t894,070"
ステップ 3 :gsub
が機能していることはわかってread.delim
おり、 にはtext
の代わりに使用できる " " 引数があることがの結果に対して直接file
使用できます。read.delim
gsub
out <- read.delim(text = gsub("([A-Z ]+)(\\s?[0-9,]+$)", "\\\t\\1\\\t\\2", x),
header = FALSE, strip.white = TRUE)
out
# V1 V2 V3
# 1 1 NEW YORK 7,262,700
# 2 2 LOS ANGELES 3,259,340
# 3 3 CHICAGO 3,009,530
# 4 4 HOUSTON 1,728,910
# 5 5 PHILADELPHIA 1,642,900
# 6 6 DETROIT 1,086,220
# 7 7 SAN DIEGO 1,015,190
# 8 8 DALLAS 1,003,520
# 9 9 SAN ANTONIO 914,350
# 10 10 PHOENIX 894,070
考えられる最後の手順の 1 つは、3 番目の列を数値に変換することです。
out$V3 <- as.numeric(gsub(",", "", out$V3))