Giả sử tôi có một danh sách các ma trận:Giữ 2 giá trị cao nhất của mỗi hàng trong một danh sách các ma trận r
$`2010`
1 2 3 4
1 0 3 5 6
2 5 1 9 5
3 0 0 0 0
4 10 10 10 0
$`2011`
1 2 3 4
1 0 2 3 6
2 5 0 3 1
3 2 4 0 1
4 2 1 2 1
Mã để tạo ra các ma trận:
cntry<-c(1,2,3,4)
a<-c(0,5,0,10)
b<-c(3,1,0,10)
c<-c(5,9,0,10)
d<-c(6,5,0,0)
k<-data.frame(a,b,c,d)
k<-as.matrix(k)
dimnames(k)<-list(cntry,cntry)
e<-c(0,5,2,2)
f<-c(2,0,4,1)
g<-c(3,3,0,2)
h<-c(6,1,1,1)
l<-data.frame(e,f,g,h)
l<-as.matrix(l)
dimnames(l)<-list(cntry,cntry)
list<-list(k,l)
names(list)<-2010:2011
Tôi muốn giữ hai giá trị cao nhất trong mỗi hàng và thay thế các giá trị nhỏ hơn còn lại của các ô khác trong cùng hàng bằng 0.
Nếu có nhiều hơn hai ô có giá trị cao nhất, tôi muốn để tất cả các ô đó như cũ (ví dụ: 10 10 10 0-> 10 10 10 0, 5 1 9 5 -> 5 0 9 5). Tất cả các ô khác của hàng phải được đặt thành 0 lần nữa.
Kết quả sẽ giống như thế này:
$`2010`
1 2 3 4
1 0 0 5 6
2 5 0 9 5
3 0 0 0 0
4 10 10 10 0
$`2011`
1 2 3 4
1 0 0 3 6
2 5 0 3 0
3 2 4 0 0
4 2 0 2 0
Tôi không chắc chắn làm thế nào để tiếp cận vấn đề này, vì vậy bất kỳ sự giúp đỡ là rất hoan nghênh!
Có thể sử dụng 'y <' vì nó sẽ nhanh hơn '% trong%'? Ngoài ra, có khả năng làm việc tốt hơn với số điểm nổi. +1. – BrodieG
@BrodieG Điểm tốt! Cảm ơn bạn. – jbaums