2013-10-11 3 views
-4

어떤 정수형 벡터에서 중복 요소를 제거하려고하는데 내장 함수가없는 경우 duplicated(), unique()anyDuplicated()입니다. 결과는 unique()과 같아야합니다.R - 벡터에서 중복 요소 없애기

지금까지 나는 벡터에서 값을 증가 순서대로 얻었습니다 (충분하지 않음). 나는이 증가하는 순서로 값의 벡터를 얻기 위해 다음 rle(vec)$valvec <- sort(vec)을 사용할 수 있습니다

vec <- c(1,2,2,4,1,1,5,6,3,9,0,4)

: 나는 (주어진 벡터의 경우) 다음과 같이했다. 나는 또한 sort(vec,index.return=TRUE)$ix 함수를 정렬에서 주문 벡터를 얻을 수 있고이 result 벡터에 주문을 적용하고 싶습니다 (그러나 result은 짧고 vec이기 때문에 가능하지 않습니다).

이 아이디어를 해결하는 방법은 무엇입니까? 사전

+2

huh? 왜 그 기능들을 사용하고 싶지 않아? – eddi

+1

좋습니다.하지만 기본 제공 기능을 사용하지 않는 이유는 무엇입니까? 이거 재미있는거야? 그렇지 않으면, 겉보기에 이상한 요청에 대한 필요성을 알면 유용한 답변을 제공하는 데 크게 도움이됩니다. – Aaron

+0

네, 선생님에게서받은 도전적인 일입니다. 또한 함수, 루프 및 if-else 문 사용은 ** 허용되지 않습니다 **. 더 일찍 언급하는 것을 잊었다. – user2871983

답변

3

감사 당신은 할 수 있습니다 :

것들을 부 자연스러운 방식으로 작업을 수행하는 방법에
> vec[match(vec, vec) == seq_along(vec)] 
# [1] 1 2 4 5 6 3 9 0 
+3

P. 나는 처음부터 숙제 였음을 알았 더라면 대답하지 않기를 원했을 것이다. 나는 내 대답을 삭제하려고 생각했다. 그때 깨달았다. 1) OP는 이미 내 대답을 볼 기회가 있었다. 2) 내 대답을 볼 수있게 남겨두고 교사가 그것을 발견했다면 OP의 일이 아니라는 것을 알 것이다. 그래서 ... 나는 여기서 내 대답을 떠날거야. – flodel

+0

좋은 솔루션이지만, 나에게 명확하지 않기 때문에 그것을 사용하지는 않습니다. 나는 여전히 나의 접근 방식을 선호한다. 나는 누군가가 나에게 더 많은 방법에 대한 힌트를 줄 것이라고 생각했지만 내가 틀렸다고 생각한다. 문제를 일으켜서 미안 해요. – user2871983

+0

@flodel이 선생님 이오?! 이것은 정말 멋지며, 어떻게 작동하는지 머리를 감싸기 위해 각 비트를 실행해야했습니다. 좋은 것. –

0

...

> vec[rank(vec,t="first")==rank(vec,t="min")] 
[1] 1 2 4 5 6 3 9 0 
> vec[{o<-outer(vec,vec,"-");rowSums((o==0) * (row(o)>col(o)))==0}] 
[1] 1 2 4 5 6 3 9 0 
> vec[!mapply("%in%",vec,lapply(seq_along(vec),function(x) head(vec,x-1)))] 
[1] 1 2 4 5 6 3 9 0 
0

나는 매우 간단한 해결책을 찾아 냈다. 다음을 실행하면 충분합니다. union(vec,vec)

관련 문제