0

StackOverflowコミュニティの皆様、

解析して計算を実行しようとしている大学のプロジェクトのデータセットがあります。次のようになります。

Month,1,2,3,3,4,4,5,6,7
x.1,0,0,0,0,0,0,0,0,0
x.2,0,0,0,0,0,0,0,0,0
x.3,0,0,0,6,5,5,,,15
x.4,0,0,0,7,7,,,,15
x.5,1,1,1,11,7,5,,,0
x.6,1,1,1,14,6,,,,0
x.7,1,1,1,17,5,,,,15
x.8,1,1,1,21,4,,,,15
x.9,0,0,0,1,1,1,1,1,0
x.10,0,0,0,1,1,1,1,1,0
x.11,1,0,0,1,1,1,1,1,0
x.12,0,0,0,0,0,0,0,0,1
x.13,0,0,0,0,0,0,0,0,0
x.14,0,1,0,0,0,0,0,0,0
x.20,orchid,,,orchid,rose,orchid,orchid,orchid,
x.23,0,0,0,1,1,1,1,1,1
x.24,,,,,buttercup,buttercup,buttercup,buttercup,lilac
x.25,0,0,0,1,1,0,1,1,1
x.26,,,,17,,,,,15
x.27,,,,999,,,,,15

次に、次のようにインポートしようとします。

data <- read.csv("~/data_munging/data.csv", header=F)
my_matrix <- as.matrix(data)

ここでの問題は、データセットの最初の列が実際には変数の名前であり、as.matrix()行(変数)名として読み取られないことです。

(一部のデータにも穴がありますが、別の質問に残しておきます)。

私はRを初めて使用し、何を間違っているのか疑問に思っています。

更新: Justinのコメントによると、データセットをインポートしstr()て生成する方法は次のとおりです。

> sample_data <- read.csv("~/data_munging/sample_data.csv", header=F)
> str(sample_data)
'data.frame':   28 obs. of  10 variables:
 $ V1 : Factor w/ 28 levels "Month","x.1","x.10",..: 1 2 13 22 23 24 25 26 27 28 ...
 $ V2 : Factor w/ 4 levels "","0","1","orchid": 3 2 2 2 2 3 3 3 3 2 ...
 $ V3 : int  2 0 0 0 0 1 1 1 1 0 ...
 $ V4 : int  3 0 0 0 0 1 1 1 1 0 ...
 $ V5 : Factor w/ 12 levels "","0","1","11",..: 8 2 2 9 10 4 5 6 7 3 ...
 $ V6 : Factor w/ 9 levels "","0","1","4",..: 4 2 2 5 7 7 6 5 4 3 ...
 $ V7 : Factor w/ 7 levels "","0","1","4",..: 4 2 2 5 1 5 1 1 1 3 ...
 $ V8 : Factor w/ 6 levels "","0","1","5",..: 4 2 2 1 1 1 1 1 1 3 ...
 $ V9 : Factor w/ 6 levels "","0","1","6",..: 4 2 2 1 1 1 1 1 1 3 ...
 $ V10: Factor w/ 6 levels "","0","1","15",..: 5 2 2 4 4 2 2 4 4 2 ...

それが行列であるべきだと私が信じる理由は、このようにそれMonthが因子として読み、そのレベルが蛾(年の月)ではなく行名であるためです。

更新2: CSVの元のデータセットを使用します。

4

1 に答える 1

4

行列を返す行列とデータフレームの転置メソッドがあります。

tdat <- t( read.table(text="Month,1,2,3,3,4,4,5,6,7
 x.1,0,0,0,0,0,0,0,0,0
 x.2,0,0,0,0,0,0,0,0,0
 x.3,0,0,0,6,5,5,,,15
 x.4,0,0,0,7,7,,,,15
 x.5,1,1,1,11,7,5,,,0
 x.6,1,1,1,14,6,,,,0
 x.7,1,1,1,17,5,,,,15
 x.8,1,1,1,21,4,,,,15
 x.9,0,0,0,1,1,1,1,1,0
 x.10,0,0,0,1,1,1,1,1,0
 x.11,1,0,0,1,1,1,1,1,0
 x.12,0,0,0,0,0,0,0,0,1
 x.13,0,0,0,0,0,0,0,0,0
 x.14,0,1,0,0,0,0,0,0,0
 x.20,orchid,,,orchid,rose,orchid,orchid,orchid,
 x.23,0,0,0,1,1,1,1,1,1
 x.24,,,,,buttercup,buttercup,buttercup,buttercup,lilac
 x.25,0,0,0,1,1,0,1,1,1
 x.26,,,,17,,,,,15
 x.27,,,,999,,,,,15", sep=",", header=FALSE, as.is=TRUE) )
 # It might not be immediately obvious that the transpose function converts to matrix
 newdat <- tdat[-1, ]
 colnames(newdat) <- dat[1,]
 newdat <- as.data.frame(newdat)   
# when converted back , everything is factors. Will need to convert to get numeric
  newdat[ , -grep("20|24", names(newdat) ) ] <- 
                    lapply(newdat[ , -grep("20|24", names(newdat) )], 
                             function(x) as.numeric( as.character(x) ))
# Need to use grep to convert character-names to numeric so can use negative indexing
# and used the redundant `as.numeric(as.character(x))` to illustrate good practice.

その結果:

> newdat
    Month x.1 x.2 x.3 x.4 x.5 x.6 x.7 x.8 x.9 x.10 x.11 x.12 x.13 x.14   x.20 x.23      x.24 x.25 x.26 x.27
V2      3   2   2   3   3   4   4   3   3   2    2    3    2    2    3 orchid    2              2    1    1
V3      1   1   1   2   2   2   2   2   2   1    1    1    1    1    2   <NA>    1      <NA>    1   NA   NA
V4      2   1   1   2   2   2   2   2   2   1    1    1    1    1    1   <NA>    1      <NA>    1   NA   NA
V5      4   2   2   6   5   5   5   5   5   3    3    3    2    2    3 orchid    3              3    3    3
V6      5   2   2   5   5   7   6   6   6   3    3    3    2    2    3   rose    3 buttercup    3    1    1
V7      5   2   2   5   1   6   1   1   1   3    3    3    2    2    3 orchid    3 buttercup    2    1    1
V8      6   2   2   1   1   1   1   1   1   3    3    3    2    2    3 orchid    3 buttercup    3    1    1
V9      7   2   2   1   1   1   1   1   1   3    3    3    2    2    3 orchid    3 buttercup    3    1    1
V10     8   2   2   4   4   3   3   4   4   2    2    2    3    2    3           3     lilac    3    2    2

おそらく欠損値指標である 999 値と、因子列に欠損値の 2 つの異なる値があることに気付きました。これは、 read.table が列を入力する方法の副作用です。V3 および V4 列は数値であり、連続するコンマを真の欠落として処理すると「考え」ていましたが、他のすべての列 (転置前) は因子変数または文字変数と見なされ、連続するコンマは同じではない "" に変換されました。 _NA_character または要因の NA として。

于 2012-08-10T20:33:22.970 に答える