0

私は R が初めてで、データセット (「データ」) に多数の新しい変数を作成しようとしています。

このデータセットでは、列は質問が回答されたかどうかの二分法コーディングです。質問番号は下付き文字 ("Q_1, "Q_2") で表されます。各質問にはいくつかの属性があり、同じ下付き文字 (つまり、"Q_Attribute1_1"、"Q_Attribute2_1") を使用して名前を付けたいと思います。マルチレベル分析のためにデータを長い形式に変換します. しかし、合計 30 の質問があり、それぞれに 18 の質問レベルの属性があるため、手動で 540 個の変数 (30x18) を作成するのは賢明ではないようです. 0/1 などの単一の値。

2 つのベクトル (1 つは変数名、もう 1 つは関連する値) を作成したら、一意の変数名をそれぞれ20,000 ケースのより大きなデータ セット ("main.data") に列として追加する必要があります。この変数の値を、上記のすべてのケースのデータにリストされている値と同じ値にしたいと考えています。これはどのように実装できますか?

4

2 に答える 2

0

データをデータフレームに配置することはできませんか:

data<-matrix(rbinom(18*30,1,.5),nrow=18,ncol=30)
questions<-paste("Q",1:30,sep="_")
attributes<-paste("Attribute",1:18,sep="")
df<-data.frame(data,row.names=attributes)
names(df)<-questions

その後、Q_1 のすべての回答にアクセスできます。

> df[,'Q_1']
 [1] 0 1 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 1

属性 2 のすべての質問:

> df['Attribute2',]
           Q_1 Q_2 Q_3 Q_4 Q_5 Q_6 Q_7 Q_8 Q_9 Q_10 Q_11 Q_12 Q_13 Q_14 Q_15
Attribute2   1   0   0   0   1   1   0   1   0    1    1    1    1    1    0
           Q_16 Q_17 Q_18 Q_19 Q_20 Q_21 Q_22 Q_23 Q_24 Q_25 Q_26 Q_27 Q_28
Attribute2    1    1    1    0    0    1    1    0    1    0    0    1    1
           Q_29 Q_30
Attribute2    1    0

または質問 1 属性 18

> df['Attribute1','Q_18']
[1] 1

編集:

540 個の変数を作成するだけの場合:

test<-paste("Q_Attribute",c(1:18),sep="")
test<-c(sapply(test,function(x,y){paste(x,y,sep="_")},y=c(1:30)))
lapply(test,function(x){assign(x,NA,envir = .GlobalEnv)})
于 2012-07-10T19:04:22.363 に答える
-1

私の質問を解決したコード:

You may use "melt" function in reshape2 package to transform the data to 
long format. Hope the following example helps! 
> set.seed(1) 
> data <- matrix(rbinom(15, size = 1, 0.5), 3, 5) 
> colnames(data) <-  paste("attribute", 1 : 5, sep = "") 
> data <- data.frame(question = 1 : 3, data) 
> data

  question attribute1 attribute2 attribute3 attribute4 attribute5 
1        1          0          1          1          0          1 
2        2          0          0          1          0          0 
3        3          1          1          1          0          1 
> library(reshape2) 
> melt(data, "question") 


  question   variable value 
1         1 attribute1     0 
2         2 attribute1     0 
3         3 attribute1     1 
4         1 attribute2     1 
5         2 attribute2     0 
6         3 attribute2     1 
7         1 attribute3     1 
8         2 attribute3     1 
9         3 attribute3     1 
10        1 attribute4     0 
11        2 attribute4     0 
12        3 attribute4     0 
13        1 attribute5     1 
14        2 attribute5     0 
15        3 attribute5     1 `

#Then, concatenate two variables into a unique name.
> data_long$varnames <-paste(data_long$variable, data_long$W1Qs, sep="")  

#Next, create a vector of all of the unique variable names
> myvars <-c(data_long$varnames)
#Also create a vector of the values corresponding to the unique variable names
> myvalues <-c(data_long$value)

#Then, just add in use the vector of var names to create new columns in main dataset
> main.data[myvars] <-0
#Replace the values assigned to those columns FOR ALL ROWS with the values in 2nd vector
> main.data=rep(myvalues, each=NROW(main.data))
于 2012-07-11T16:11:39.290 に答える