2

以下のコマンドをRに入力すると、11行5列(変数)のデータフレームが作成されます。私の質問は、R がこのデータ セットに 5 つの列があることをどのように認識するのでしょうか? Rが1行×55列のデータフレームを作成するのを止めているのは何ですか?

ありがとうございました!

d <- read.table(header=FALSE, fill=TRUE, text="
  1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  ")
4

3 に答える 3

3

この関数read.tableにはいくつかのパラメーターがあり、それらのほとんどには既定値があるため、指定する必要はありません。特に、パラメータsepがあり、デフォルトでは です""。このパラメーターは、列の数を認識する魔法を行うものです。コードを次のように変更した場合:

data.txt="
  1   2010-10-04 52495  2010-10-04 11.6  
  2   2010-10-01 53000  2010-10-01 15.3
  3   2010-09-30 52916  2010-09-30 14.3
  4   2010-09-29 52785  2010-09-29 11.3
  5   2010-09-28 53348  2010-09-28 18.2
  6   2010-09-27 52885  2010-09-24 11.7
  7   2010-09-24 52174  2010-09-23 15.0
  8   2010-09-23 51461  2010-09-22 18.6
  9   2010-09-22 51286  2010-09-20 17.9
  10  2010-09-21 50968  
  11  2010-09-20 49250  "

# reading the same data with different sep values
d0 <- read.table(header=FALSE, fill=TRUE, text=data.txt)
d1 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="")
d2 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=",")
d3 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=";")
d4 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="-")
d5 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep="0")
d6 <- read.table(header=FALSE, fill=TRUE, text=data.txt, sep=".")

# aggregatting all data frames
d = list(d0=d0, d1=d1, d2=d2, d3=d3, d4=d4, d5=d5, d6=d6)
dims.d = sapply(d, dim) # get the dimension of all dataframes
rownames(dims.d) = c("nrow", "ncol")
print(dims.d)

     d0 d1 d2 d3 d4 d5 d6
nrow 11 11 11 11 11 11 11
ncol  5  5  1  1  5 12  2

これで、データの読み取りが異なっていることがわかります。5 つの列を持つすべてのデータ フレームはまったく異なりますが、最初の 2 つ (確認できます)。常に 11 行あるのはなぜですか? 行末は新しい行の始まりを示すために使用されるためです。明示的な介入なしで何が起こっているかを確認するために、常にこの既定のパラメーターを参照することをお勧めします。

于 2013-06-29T18:17:38.870 に答える
2

read.tableフレンドは、表形式のデータ、つまり、設定された数の行と列を持つと記述できる入力を読み取るためのものです。この関数は、入力内の区切り文字と改行から行と列を推測します。これが、11 行と 5 列を取得する理由です。シーケンシャルな入力、つまり特定の構造を持たない要素の集まりがある場合は、 を使用しますscan

一方、その入力に行番号があります。これは、実際に表形式のデータがあることを意味します...そうですか?

于 2013-06-29T17:32:41.380 に答える
1

5 つの列と 11 の行があるので、それを期待する必要があります (驚くことではありません)。別の列では、20 行と 2 列になります。

d <- read.table(header=FALSE, fill=TRUE, text="
          2010-10-04 52495   
          2010-10-01 53000  
          2010-09-30 52916  
          2010-09-29 52785  
          2010-09-28 53348  
          2010-09-27 52885  
          2010-09-24 52174  
          2010-09-23 51461  
          2010-09-22 51286  
          2010-09-21 50968  
          2010-09-20 49250
          2010-10-04 11.6
          2010-10-01 15.3 
          2010-09-30 14.3 
          2010-09-29 11.3 
          2010-09-28 18.2
          2010-09-24 11.7
          2010-09-23 15.0
          2010-09-22 18.6
          2010-09-20 17.9")

1 行× 43 列を作成する場合は、すべての日付と値を 1 つの行 (スクリプト ファイル内) に配置する必要があります。次のようにします。

d <- read.table(header=FALSE, fill=TRUE, text="2010-10-04 52495 2010-10-01 53000 2010 09 30 52916 2010-09-29 52785 2010-09-28 53348 2010-9-27 52885 2010-09-24 52174 2010-09-23 51461  2010-09-22 51286  2010-09-21 50968 2010-09-20 49250 2010-10-04 11.6 2010-10-01 15.3 2010-09-30 14.3 2010-09-29 11.3 2010-09-28 18.2 2010-09-24 11. 2010-09-23 15.0 2010-09-22 18.6 2010-09-20 17.9")

2 行 32 列の場合は、スクリプトに 2 行入れます。このようなもの:

d <- read.table(header=FALSE, fill=TRUE, text="2010-10-04 52495 2010-10-01 53000 2010 09 30 52916 2010-09-29 52785 2010-09-28 53348 2010-9-27 52885 2010-09-24 52174 2010-09-23 51461  2010-09-22 51286  2010-09-21 50968 2010-09-20 49250 2010-10-04 11.6 2010-10-01 15.3 2010-09-30 14.3 2010-09-29 11.3
                2010-09-28 18.2 2010-09-24 11. 2010-09-23 15.0 2010-09-22 18.6 2010-09-20 17.9")
于 2013-06-29T17:23:45.097 に答える