我有一個較大的數據集(4352個觀察值),我試圖將其分解爲連續和離散的數據以準備進行貝葉斯分析。到目前爲止,我已經嘗試了兩種不同的方法:使用if-then語句和if else
,均在for
循環中。`for`循環強制矩陣到R中的大列表中
我有我的觀察作爲對象y
比例:
> head(y,10)
A B C DEF
1 0.50 0.5 0.00 0.0
2 0.95 0.0 0.05 0.0
3 0.10 0.0 0.00 0.9
4 0.70 0.0 0.30 0.0
5 0.95 0.0 0.05 0.0
6 0.60 0.0 0.40 0.0
7 0.95 0.00 0.05 0.0
8 0.95 0.05 0.00 0.0
9 1.00 0.00 0.00 0.0
10 1.00 0.00 0.00 0.0
和y
長度,我將在以後使用索引的向量的行是否是離散的(0,1)或連續。
y.discrete <- rep(0,dim(y)[1])
我的第一種方法是if-then語句:
y.d <- matrix(NA,n,ncat)
for (i in 1:n){
y.d[i,][max(y[i,])==1]=y[i,]
y.discrete[i][!is.na(y.d[i,])]=1
}
的for
環路產生Error in y.d[i, 1] : incorrect number of dimensions
。如果在if-then語句中調用一個單一元素(例如y.d[i,1]
),那麼它會正常運行。此外,一旦循環運行,對象y.d
從矩陣變爲大列表。我相信這是造成維數錯誤的原因。如果你在i
看這裏,這是1
我自己也嘗試了if else
:
y.d <- matrix(NA,n,4)
for (i in 1:n){
if (max(y[i,])==1) {
y.d[i,]<-y[i,]
} else {
if (!is.na(y.d[i,1])) {
y.discrete[i]<-1
}
}
}
這提供了與環相同的錯誤,但如果你看看i
的最後一個值,它是10.這還有改班的問題。
有沒有人對這裏面發生的事情有任何想法?我已經請了兩位同事求助,我們都很難過。我感謝您的幫助。我在Windows 7,64位機器上運行R 3.0.3。
編輯:爲了澄清,我想y.d
包含y
其中一個值(A,B,C,DEF)恰好等於1的相應行。否則,它應該保持NA。
編輯2: 我一直在嘗試獲取@joran提供的答案的反函數,以用於連續觀察(其值介於 - 但不包含 - 0,1)以及使用索引編制相同的矢量不起作用。當我嘗試:
y.c<-y
y.c[y.discrete,] <- NA
我仍然在我的數據與1點的行(見行9 & 10),它不是什麼y.d
交付逆:
> head(y.d,10)
A B C DEF
1 NA NA NA NA
2 NA NA NA NA
3 NA NA NA NA
4 NA NA NA NA
5 NA NA NA NA
6 NA NA NA NA
7 NA NA NA NA
8 NA NA NA NA
9 1 0 0 0
10 1 0 0 0
> head(y.c, 10)
A B C DEF
1 NA NA NA NA
2 0.95 0.00 0.05 0.0
3 0.10 0.00 0.00 0.9
4 0.70 0.00 0.30 0.0
5 0.95 0.00 0.05 0.0
6 0.60 0.00 0.40 0.0
7 0.95 0.00 0.05 0.0
8 0.95 0.05 0.00 0.0
9 1.00 0.00 0.00 0.0
10 1.00 0.00 0.00 0.0
很抱歉,如果這是一個愚蠢的問題,但是你知道爲什麼我不能只爲我們使用以前的逆向量的向量索引嗎?
這不是從你的問題你的期望輸出應該是什麼明確的。你能描述一下你想要'y.d'包含嗎?推測是「離散」,你只是意味着一行'y'只包含1或0? – joran
R版本3.0.3?當前版本是3.2.2。可能想先更新。 – r3robertson
@ r3robertson我需要的一些軟件包不適用於任何新的軟件。 – Maalthou