簡體   English   中英

基於R中閾值向量的矩陣處理

[英]Matrix Manipulation based on threshold vectors in R

我有一個如下的數字矩陣

1 2 3 4 5 
1 4 6 1 4
2 4 1 6 8 
1 7 3 6 7
1 4 5 6 2

我有一個向量c(2,4,2,6,8)

對於每一行,我想取向量中的相應值並創建一個新矩陣,其中該行中所有大於向量值的值都變為0。

輸出應該看起來像

1 2 0 0 0   # greater than 2 is changed to 0
1 4 0 1 4   # greater than 4 changed to 0
2 0 1 0 0   # greater than 2 changed to 0
1 0 3 6 0   # greater than 6 changed to 0
1 4 5 6 2   # greater than 8 changed to 0

有沒有一種方法,而無需通過循環進行實際編碼?

DF <- read.table(text="1 2 3 4 5
1 4 6 1 4
2 4 1 6 8
1 7 3 6 7
1 4 5 6 2") 

m <- as.matrix(DF)
v <- c(2,4,2,6,8)

m * (m <= v)
#      V1 V2 V3 V4 V5
# [1,]  1  2  0  0  0
# [2,]  1  4  0  1  4
# [3,]  2  0  1  0  0
# [4,]  1  0  3  6  0
# [5,]  1  4  5  6  2

是的你可以:

m <- matrix(sample(10,25,replace = TRUE),5,5)
> m[m > matrix(c(2,6,8,4,5),5,5)] <- 0

我做了一個不同的示例,因為您的示例不容易重現。

或者像DWin指出的那樣,R將為您完成矩陣構造:

m[m > c(2,6,8,4,5)] <- 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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