2017-09-06 79 views
0

我已經創建了一個矩陣像這樣在R A矩陣的行:比較的數據幀的行與

> head(matrix) 
    Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 
[1,] "0" "0" "1" "0" "1" "1" "0" "0" "0" "0" "NA" 
[2,] "1" "0" "1" "0" "1" "1" "0" "0" "0" "0" "NA" 
[3,] "0" "1" "1" "0" "1" "1" "0" "0" "0" "0" "NA" 
[4,] "1" "1" "1" "0" "1" "1" "0" "0" "0" "0" "NA" 
[5,] "0" "0" "2" "0" "1" "1" "0" "0" "0" "0" "NA" 
[6,] "1" "0" "2" "0" "1" "1" "0" "0" "0" "0" "NA" 

現在,我想以上用下面的數據幀中的矩陣相比較:

> head(df) 
     cod Var11 Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10  Var12 
1 C000354  B 1 1 4 0 1 2 0 0 0  1 51520.72 
2 C000404  A 1 0 1 0 4 4 0 0 1  1 21183.25 
3 C000444  A 1 0 4 1 3 3 0 0 0  1 67504.74 
4 C000480  A 1 1 2 0 2 3 0 0 1  1 26545.92 
5 C000983  C 1 0 1 0 3 4 0 0 0  0 10379.37 
6 C000985  C 1 0 3 1 3 4 0 0 0  0 18660.99 

矩陣包含變量Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10的所有可能組合,所以基本上當(從VAR1VAR10只柱)匹配df的一排的matrix行和該行中dfVar12>=90000,我希望它被寫入"A"matrix的對應列VAR11

我已經試過這一點:

for (i in 1 : nrow(matrix)) { 
    for (j in 1 : 10) { 
    ifelse(matrix[i,j]==df[,(j+2)] 
      && df$Var12[] >= 90000, 
      matrix[i,"Var11"] <- "A", 
      matrix[i,"Var11"] <- "NA") 
    } 
} 

但這個矩陣的所有行寫道:NA

有誰知道爲什麼會發生這種情況或如何解決它?

在此先感謝。

+0

[如何使一個偉大的R可重現的例子?](http://stackoverflow.com/questions/5963269) – Sotos

+0

也許它是生產NA的,因爲沒有兩個相同的行彼此 – Onyambu

回答

1

我不明白你爲什麼在循環中使用1:10和j + 2。

#Some dummy data 
col_to_match<-paste0("V",1:10) 
set.seed(123) 
mat <- cbind(matrix(sample(0:4, 100, replace=TRUE), ncol=10), "NA") 
colnames(mat)<-c(col_to_match,"V11") 
set.seed(123) 
df<- data.frame("cod"=paste0("C",1:20), "V12"= runif(20,min=88000,max=95000)) 
set.seed(1) 
df <- cbind(df, rbind(mat[3:10,col_to_match], matrix(sample(0:4, 120, replace=TRUE), ncol=10)) ) 

從僞數據,我們預計矩陣 c(3:10)[df[1:8,"V12"]>=90000]的行相匹配的虛擬數據。這些行是3 4 5 6 7 9 10

執行如下以檢查矩陣中的每一行,查找是否存在任何DF匹配的行,和V12值是否大於90000

for(i in 1:nrow(mat)){ 
    hasMatch<-any(sapply(1:nrow(df), function(j) all(df[j,col_to_match] == mat[i, col_to_match]) && df[j,"V12"]>=90000)) 
    if(hasMatch) mat[i, "V11"]<-"A" 
} 

輸出

> mat 
     V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 
[1,] "1" "4" "4" "4" "0" "0" "3" "3" "1" "0" "NA" 
[2,] "3" "2" "3" "4" "2" "2" "0" "3" "3" "3" "NA" 
[3,] "2" "3" "3" "3" "2" "3" "1" "3" "2" "1" "A" 
[4,] "4" "2" "4" "3" "1" "0" "1" "0" "3" "3" "A" 
[5,] "4" "0" "3" "0" "0" "2" "4" "2" "0" "1" "A" 
[6,] "0" "4" "3" "2" "0" "1" "2" "1" "2" "0" "A" 
[7,] "2" "1" "2" "3" "1" "0" "4" "1" "4" "3" "A" 
[8,] "4" "0" "2" "1" "2" "3" "4" "3" "4" "0" "NA" 
[9,] "2" "1" "1" "1" "1" "4" "3" "1" "4" "2" "A" 
[10,] "2" "4" "0" "1" "4" "1" "2" "0" "0" "2" "A" 
+0

非常感謝!聲明完全按照要求運作!感謝幫助 –