2017-09-25 11 views
0

カラム1,2または3の単語のいずれかがカラム4に存在するかどうかを調べたい場合は、0の場合は1を返します。たとえば、V1にはl6、V2ではl5、l4ではl15、 V3。 V4は16と1656なので、新しい列V5は1から復帰するので、V1からの一致 - 2番目の単語は16です。新しい列は1を返します。他の列に単語がありますか?

次の表の行6の別の例は、列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を使用して要素を連結し、次いで4に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と比較することができ)一緒にして、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 
関連する問題