[英]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.