4

私は Kruschke の例に取り組んでDoing Bayesian Data Analysisいますが、彼のコード例が必要とする形式にデータを取得する方法を理解するのに少し助けが必要です。第22章で、彼はこのような表を持っています

         Blue  Brown  Green Hazel
Black    20    68     5     15
Blond    94    7      16    10
Brunette 84    119    29    54
Red      17    26     14    14

スプレッドシートに入力して、このようにR使用read.table("clipboard", header=T, sep="\t")または入力することで、表を入力することに慣れていますR

con.table2 <- matrix(c(20,68,5,15,94,7,16,10,84,119,29,54,17,26,14,14),nrow=4,byrow=TRUE)
dimnames(con.table2) <- list(c("Black","Blond","Brunette","Red"),c("Blue","Brown","Green","Hazel"))

しかし、彼のコードでは、分析の準備ができているようにこのテーブルを提示しています (完全なコードはこちらhttp://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/Programs/PoissonExponentialJagsSTZ.R )

Freq = c(68,119,26,7,20,84,17,94,15,54,14,10,5,29,14,16)
Eye = c("Brown","Brown","Brown","Brown","Blue","Blue","Blue","Blue","Hazel" # runs off the page of his book
Hair = c("Black","Brunette","Red","Blond","Black","Brunette","Red","Blond","Black" # runs off the page of his book

テーブルが 3 つのベクトルに変換されたように見えます。これを行う最も効率的な方法は何ですか? 彼のデータを自分のデータに置き換えたいので、この分析に必要な形式にデータを変換する方法を学ぶのは素晴らしいことです.

4

3 に答える 3

8

このために、私はパッケージで使用melt()します:reshape2

library(reshape2)
df <- melt(con.table2, varnames=c("Hair", "Eye"), value.name="Freq")

# df is a data frame, a list from which you can easily extract the
# component vectors "Hair", "Eye", and "Freq. 
# Try, for example:
str(df)
df$Hair    
于 2012-01-29T09:54:50.207 に答える
4

クラス「テーブル」のオブジェクトをdata.framesに変換するためのベースRのメソッドがあります。マトリックスで成功しない理由は、それがテーブルであることを R に伝えていないためです。そうすると、メソッドは成功します。

class(con.table2) <- "table"
as.data.frame(con.table2)
#-----------------------
       Var1  Var2 Freq
1     Black  Blue   20
2     Blond  Blue   94
3  Brunette  Blue   84
4       Red  Blue   17
5     Black Brown   68
6     Blond Brown    7
7  Brunette Brown  119
8       Red Brown   26
9     Black Green    5
10    Blond Green   16
11 Brunette Green   29
12      Red Green   14
13    Black Hazel   15
14    Blond Hazel   10
15 Brunette Hazel   54
16      Red Hazel   14

R の「テーブル」クラスは、(作成したのと同じように) 分割表、つまり、セルにカウントがある表であることが期待されます。この場合、小数の値が含まれていても問題はありませんが、値が整数であることを期待していた一部のメソッドは、整数以外の値でチョークする可能性があります。

于 2012-01-29T13:00:28.770 に答える
2

データは行列に含まれており、髪の色が行名になっているため、最初にそれを data.frame にmelt変換し、次に を使用して tall 形式に変換できます。

d <- data.frame(
  Hair = rownames(ch_22_table),
  as.data.frame( ch_22_table )
)
library(reshape2)
melt(d, id.vars="Hair", variable.name="Eye", value.name="Freq")
于 2012-01-29T09:59:08.967 に答える