2012-05-24 164 views
-1

我有以下問題,我不知道從哪裏開始在R: 我有兩列具有相同的信息,但一列包含一些額外的信息。我希望兩列完全一致。下面是一個例子:如何刪除一列中與第二列不匹配的行?

1 1 
1 1 
2 1 
2 2 
3 2 
3 2 
4 2 
4 3 
5 3 
5 3 
    4 
    4 
    4 
    5 
    5 
    5 
    5 
    5 

因此,在第二列中的一些數字必須刪除,使得兩列具有相等的長度,並具有每行中的相同的編號。我想有可能構建一個循環,並告訴R刪除第二列中的數字,直到column1 = column2。 但我不知道從哪裏開始。如果兩行不匹配,R是否甚至有可能自動讀取兩列並刪除?

+3

你能寫位更多關於你的問題?這些數字是什麼?兩個獨立的向量?你如何創建它們?難道你不能只複製第一個(你的文章中的第一列)並將原始和複製合併到一個數組中?我真的不明白你的問題的要點。 – toniedzwiedz

回答

3

將您的問題作爲面值,這將只返回列1 == 2列和NA行的行也被刪除。如果這不是您期望的輸出結果,請進一步澄清您的問題,最好以reproducible爲例。

> dat <- read.table(text = "1 1 
+ 1 1 
+ 2 1 
+ 2 2 
+ 3 2 
+ 3 2 
+ 4 2 
+ 4 3 
+ 5 3 
+ 5 3 
+ NA 4 
+ NA 4 
+ NA 4 
+ NA 5 
+ NA 5 
+ NA 5 
+ NA 5 
+ NA 5", header = FALSE) 


> dat[dat$V1 == dat$V2 & complete.cases(dat),] 
    V1 V2 
1 1 1 
2 1 1 
4 2 2 
+1

很酷。我從來沒有意識到'read.table'允許文本輸入。 –

+0

@David - 我相信這是一個相對* R2.14.xx中添加的新參數。 – Chase

0

首先,讓我們作出這樣的說明你的問題的一些[R對象:

a <- c(1,1,2,2,3,3,4,4,5,5) 
b <- c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,5) 

從問題,這聽起來像你有他們在同一個對象:

c <- cbind(a,b) 
    Warning message: 
In cbind(a, b) : 
    number of rows of result is not a multiple of vector length (arg 1) 

但這實際上將a的第一個length(b) - length(a)元素添加到末尾,以便它只要b

你可以只填寫的a第一缺失值:

a2 <- append(a, rep(NA, 6) 

現在你可以綁定在一起他們:

c <- cbind(a2, b) 

,但現在它聽起來就像你要刪除從B元素不匹配。你提出一個for循環。但這會變得混亂,並且很快就會證明手頭的任務定義不明確。 while可能更合適,但同樣,它很快變得明顯,如@ user1407656註釋中,你可以通過a兩列剛結合在一起,得到期望的結果:

d <- cbind(a,a) 
相關問題