3

R に CSV として読み込んでいるデータ ファイルが多数あります。これらのデータ ファイルで特定の列の colClasses を指定したいのですが、種の豊富さのデータが含まれているため、データフレームの長さは不明です (したがって、種の数が異なります)。

read.csv の colClasses を使用して、最初の 10 列以降のすべての列を数値 (つまり、ncol[10]:length(df)) に設定する方法はありますか?

これは私が試したものですが、役に立ちませんでした:

df <- read.csv("file.csv", header=T, colClasses=c(ncols[10], rep("numeric", ncols)))

どんな助けでも大歓迎です。

ありがとう、ポール

4

1 に答える 1

1

を使用count.fieldsして、データ内にいくつの列があるかを判断することから始めます。これは最初の行だけで実行できます。

次に、そこからrepcolClasses.

それは醜いですが、動作します。次に例を示します。

最初の数行は、再現可能な例を提供していないため、ワークスペースにダミーの csv ファイルを作成するだけです。

X <- tempfile()
cat("A,B,C,D,E,F",
    "1,2,3,4,5,6",
    "6,5,4,3,2,1", sep = "\n", file = X)

ここから本当の答えが始まります。以下の両方の場所で、「x」を実際のファイル名に置き換えます。これ-2は、すでに考慮されている 2 つの列があるためです。

Y <- read.csv(X, colClasses = c(
  "numeric", "numeric", rep("character", count.fields(textConnection(
    readLines(X, n=1)), sep=",")-2)))

# Y <- read.csv("file.csv", colClasses = c(
#   "numeric", "numeric", rep(
#     "character", count.fields(readLines(
#       "file.csv", n = 1), sep = ",")-2)))

str(Y)
# 'data.frame':  2 obs. of  6 variables:
#  $ A: num  1 6
#  $ B: num  2 5
#  $ C: chr  "3" "4"
#  $ D: chr  "4" "3"
#  $ E: chr  "5" "2"
#  $ F: chr  "6" "1"
于 2013-10-30T17:17:39.747 に答える