3

RのUCI リポジトリから公開されているデータセットを収集しようとしています。などのいくつかのRパッケージで既に使用可能なデータセットがたくさんあることは理解していますが、UCI リポジトリから必要なデータセットがまだいくつかあります。mlbench.

これは私が学んだトリックです

url="http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data"
credit<-read.csv(url, header=F)

ただし、これはヘッダー (変数名) 情報を取得しません。その情報は、テキスト形式の*.namesファイルにあります。ヘッダー情報もプログラムで取得する方法はありますか?

4

2 に答える 2

3

これを実現するには、正規表現を使用する必要があると思います。これは、フォーマットが投稿したものと似ていると仮定して、さまざまな *.names ファイルで機能するはずですが、一般的なソリューションです。

names.file.url <-'http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.names' 
names.file.lines <- readLines(names.file.url)

# get run lengths of consecutive lines containing a colon.
# then find the position of the subgrouping that has a run length 
# equal to the number of columns in credit and sum the run lengths up 
# to that value to get the index of the last line in the names block.
end.of.names <- with(rle(grepl(':', names.file.lines)), 
                       sum(lengths[1:match(ncol(credit), lengths)]))

# extract those lines
names.lines <- names.file.lines[(end.of.names - ncol(credit) + 1):end.of.names]

# extract the names from those lines
names <- regmatches(names.lines, regexpr('(\\w)+(?=:)', names.lines, perl=TRUE))

# [1] "A1"  "A2"  "A3"  "A4"  "A5"  "A6"  "A7"  "A8"  "A9"  "A10" "A11"
# [12] "A12" "A13" "A14" "A15" "A16"
于 2012-11-08T18:23:01.267 に答える
1

Attribute Informationあなたが指摘した特定のファイルの名前でなければならないと思います。これを行うための非常に汚い解決策があります。パターンがあるという事実を使用します-あなたの名前の後に続くので、を使用:して文字列を分離し、生のベクトルから名前を取得します。:scan

url="http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data"
credit<-read.csv(url, header=F)
url.names="http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.names"
mess <- scan(url.names, what="character", sep=":")
#your names are located from 31 to 61, every second place in the vector
mess.names <- mess[seq(31,61,2)]
names(credit) <- mess.names
于 2012-11-08T18:19:31.130 に答える