簡體   English   中英

識別R中從一個向量到另一個向量的缺失

[英]Identify dropouts from one vector into another in R

我有兩個向量-第二個向量與第一個向量類似,除了某些元素丟失了。 樣本數據:

set.seed(31031966)
s1 = sample(10,20,TRUE)
s2=s1[-sample(20,5)]
s1
## [1] 6 2 3 2 7 4 9 5 9 6 6 9 4 6 8 2 5 7 4 8
s2
## [1] 6 2 7 9 5 9 6 6 9 6 8 2 5 7 8

我想要的是s2中缺少的s1中的5個位置(在這種情況下)。 因此,空格在哪里:

s1: 6 2 3 2 7 4 9 5 9 6 6 9 4 6 8 2 5 7 4 8
s2: 6 2     7   9 5 9 6 6 9   6 8 2 5 7   8

即3,4,6,13,19。

重復值存在一些歧義,其中缺少一個重復值,因為您不知道丟失的值是第一個還是最后一個。 我真的不在乎如何解決(在實際應用中這不是什么大問題)

我的想法是一個循環,該循環使匹配元素的長度從第一個開始開始,然后注意,然后從下一個位置開始繼續,但是它有點混亂和循環,並且不是R ish。 更好的方法?

請不要打高爾夫球!

該代碼似乎對我有用((不確定golf是什么代碼):

# intialize counters    
missings <- integer(length(s1)-length(s2))
j <- 1
k <- 1
# loop
for(i in seq_along(s1)) {
  if(s1[i] == s2[j]){
    j <- j +1
  }
  else {
    missings[k] <- i
    k <- k + 1
    # stop the loop if missings is filled up
    if(k > length(missings)) break
  }
}

這樣做的一個不錯的功能是,您可以在最后檢查失蹤對象,以確保它已被填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM