2017-11-21 3 views
0

두 개의 목록이 있습니다. 그리고 나는 그것들의 각 라인에 대해 각각의 공통 값에 대해 1/4의 속성을 부여하고자합니다. 이것은 일례이다두 목록의 공통 요소를 감지하는 방법은 무엇입니까?

v=c(433,405,451) 
v1=c(405,416,388 ,464,392,393,433) 

w=c(405,385,384,431) 
w1=c(405,478,451,430) 

list1=list(v,v1) 
list2=list(w,w1) 

> list1 
[[1]] 
[1] 433 405 451 

[[2]] 
[1] 405 416 388 464 392 393 433 

> list2 
[[1]] 
[1] 405 385 384 431 

[[2]] 
[1] 405 478 451 430 

사실, 우리는 두리스트는 제 1 및 제 2 라인 (405)이있는 공통 값을 볼 공통 값 0이있는 경우, 우리는 1/4을 포함하는 벡터를 작성 그렇지 않으면이 경우 상기 OUPUT 값은 다음과 같아야리스트 1 [1]과리스트 2 [1] (405)로서 공통의 값을 갖기 때문에

1/4 
1/4 

이다. 이고 list1 [2] 및 list2 [1]은 공통 값 405를가집니다.

어떻게하면됩니까? 감사!

+0

재현 예를 게시하시기 바랍니다 동일한 길이있다 . – Mark

+0

코드를 수정했습니다! 이제 더 쉬워졌습니다! –

+0

'dput'의 결과를 게시 할 때'head'를 게시하고 있습니다. 다른 사람들이 수동으로 입력하고 목록을 다시 만들지 않도록하십시오. – Mark

답변

0
sapply(1:length(list1),function(x){if(sum(list1[[x]] %in% list2[[x]])>0){1/4}else{0} }) 

[1] 0.25 0.25 

을 제공합니다 그리고 당신이 개 목록으로 오래 일해야하는 것은

나는이 작업을 위해 ifelse을 사용
1

ifelse(v %in% v1,1/4,0) 
[1] 0.25 0.25 0.00 
+0

방금 ​​놀라운 기능을 재발 명했습니다. 답변 주셔서 감사합니다. – denis

관련 문제