2014-10-06 63 views
0

條件我想合併中的R的兩列用以下條件:合併列與R中

  1. 如果一個列具有一個條目(0,1,2),而另一列具有' ./。',請使用合併列中第一列的條目;

  2. 如果兩列有相同的條目(0,1,2),則使用合併列中的任一條目;如果一列有一個條目(1,2),另一列有不同的條目(0,1,2),則使用小於1的條目。例如,如果第一列有條目爲'0',第二列條目爲'1',則在合併列中使用條目'0'。

我從字面上不知道如何開始。有人能給我一個提示嗎?感謝

我可以在Java中做到這一點,但想先嚐試R,因爲列操作更直截了當的R.

回答

1

也許:

apply(cbind(x,y), 1, # This will coerce to character if any "./" present. 
     function(s) if("./." %in% s) { s[ which(s != "./.")]} else{ 
            if(s[1]==s[2]){ s[1] } else{ 
                min(s) 
            }        } 
    ) 

有沒有檢查的錯誤的非{0,1,2}價值,但我從預期會受到這種限制的問題中解脫出來。一個字符向量將被返回。

> x 
[1] "1" "./." "0" "2" 
> y <- rev(x);y 
[1] "2" "0" "./." "1" 
> apply(cbind(x,y), 1, 
+   function(s) if("./." %in% s) { s[ which(s != "./.")]} else{ 
+         if(s[1]==s[2]){ s[1] } else{ 
+              min(s) 
+              }   }) 
[1] "1" "0" "0" "1"