[英]R data manipulation matrix
我有一個專欄如下。 僅對於非null元素,我想得到如下的矩陣。 第6列表示實際值。
1 0 0 0 0 1
0 1 0 0 0 2
0 0 0 1 0 5
任何提示有效的方法是什么? 我應該使用哪些命令? 我想在for循環中編寫一個if循環,但不要認為它會非常有效:(
abc=c('1','2','null','5','null')
目前尚不清楚為什么矩陣是六個元素寬,但如果它是長度(abc)+ 1,那么只需用該表達式代替我使用6。
> abcn <- as.numeric(abc)
> zero <- matrix(0,nrow=length(abcn[!is.na(abcn)]), ncol=6)
> zero[ cbind(1:3, which( !is.na(abcn)) ) ] <- 1
> zero[ , 6] <- abcn[!is.na(abcn)]
> zero
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 0 0 0 0 1
[2,] 0 1 0 0 0 2
[3,] 0 0 0 1 0 5
您可以使用兩個庫侖矩陣索引teh [<-
函數的矩陣,這就是我在第三行中所做的。 其余部分是普通矩陣索引。
假設您的示例中存在錯誤,這實際上只是一個虛擬變量編碼:
abc <- c('1','2','null','5','null')
abc <- factor(abc,levels=1:5)
cbind(model.matrix(~abc+0),orig=na.omit(abc))
# abc1 abc2 abc3 abc4 abc5 orig
#1 1 0 0 0 0 1
#2 0 1 0 0 0 2
#4 0 0 0 0 1 5
如果您想自動計算可能因素的范圍,請嘗試:
abc <- c('1','2','null','5','null')
rng <- range(as.numeric(abc),na.rm=TRUE)
abc <- factor(abc,levels=seq(rng[1],rng[2]))
cbind(model.matrix(~abc+0),orig=na.omit(abc))
# abc1 abc2 abc3 abc4 abc5 orig
#1 1 0 0 0 0 1
#2 0 1 0 0 0 2
#4 0 0 0 0 1 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.