簡體   English   中英

R數據操作矩陣

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM