[英]`for` loop coercing matrix into large list in R
我有一個較大的數據集(4352個觀測值),我試圖將其分解為連續的和離散的數據,以准備進行貝葉斯分析。 到目前為止,我已經試過這樣做的兩種不同的方法:使用if-then語句和if else
,都內for
循環。
我將觀察結果作為對象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 yd[i, 1] : incorrect number of dimensions
產生Error in yd[i, 1] : incorrect number of dimensions
。 如果您在if-then語句中調出一個元素(例如yd[i,1]
),則它可以正常運行。 同樣,一旦循環開始運行,對象yd
將從矩陣更改為大列表。 我相信這是導致尺寸數量錯誤的原因。 如果你在這里看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。
編輯:為明確起見,我希望yd
包含y
中對應的行,其中值(A,B,C,DEF)之一恰好等於1。否則,應保持NA。
編輯2:我一直在嘗試獲取@joran提供的答案的反函數,以用於連續觀測(值介於-之間但不包含-0,1),並且使用相同向量進行索引是'工作。 當我嘗試:
y.c<-y
y.c[y.discrete,] <- NA
我的數據中仍然有帶有1的行(請參閱第9和10行),這與yd
傳遞的結果相反:
> 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.discrete <- apply(y,1,function(x) as.integer(any(x == 1)))
> y.discrete
1 2 3 4 5 6 7 8 9 10
0 0 0 0 0 0 0 0 1 1
接着:
> y.d <- y
> y.d[!y.discrete,] <- NA
> y.d
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.