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