2017-09-25 3 views
0

열 1,2 또는 3의 단어 중 하나가 4 열에 있는지 확인하고 싶습니다. 예인 경우 0을 반환하지 않으면 1을 반환합니다. 예를 들어 V1에 l6, V2에 l5, l8을 가질 것입니다. V3. V4는 16과 16이므로 새로운 열 V5는 1이됩니다. V1과 일치하는 두 번째 단어는 16입니다. 새 열은 1을 반환합니다.다른 컬럼에 단어가 있습니까?

아래 표 6의 또 다른 예는 1을 새 열로 반환합니다. V3 열에 V4에 단어 l7이 있기 때문입니다. - V4를 다른 컬럼과 항상 비교하여 출력하고 싶습니다. 고맙습니다.

id     V1  V2   V3     V4 
    1     l7  l7   l7     l7 
    2    l31 l7 l56 l7   l35    l22 
    3    l31 l7  l7  l31 l7    l7 
    4     l22  l16  l22    l28 
    5     l31  l31  l32    l31 
    6    l18 l48  l18  l7 l22   l28,l36,l7 
    7     l31  l31  l31    l32 
    8     l31  l10  l39    l31,l7 
    9    l7 l35  l31  l7 l35    l31 
    10    l36  l36  l36 l7    l36 

답변

1

우리는, strsplit에 열을 분할 Map를 사용하여 요소와 연결하여 다음 5 열

as.integer(mapply(function(x, y) any(x %in% y), 
       strsplit(df1[,5], '[, ]'), 
    do.call(Map, c(f = c, lapply(df1[2:4], function(x) strsplit(x, "[, ]")))))) 
#[1] 1 0 1 0 1 1 0 1 1 1 

이상의 콤팩트, paste 행과 비교할 수 있습니다 (열 2-4) 함께 strsplit 및 비교하십시오.

as.integer(sapply(Map(`%in%`, strsplit(df1[,5], '[, ]+'), 
    lapply(strsplit(do.call(paste, df1[2:4]), "[ ,]+"), unique)), any)) 
#[1] 1 0 1 0 1 1 0 1 1 1 
관련 문제