2017-12-22 2 views
4

データフレーム内に、指定された2つの列に用語が出現するかどうかによって、TRUEまたはFALSEの新しい列を作成したいとします。 これは、いくつかの例のデータである:複数の指定された列にまたがってgreplする

AB <- c('CHINAS PARTY CONGRESS','JAPAN-US RELATIONS','JAPAN TRIES TO') 
TI <- c('AMERICAN FOREIGN POLICY', 'CHINESE ATTEMPTS TO', 'BRITAIN HAS TEA') 
AU <- c('AUTHOR 1', 'AUTHOR 2','AUTHOR 3') 
M <- data.frame(AB,TI,AU) 

私は1つの列、または他のためにそれを行うことができますが、私は両方のためにそれを行う方法を見つけ出すことはできません。言い換えれば、互いに上書きしない2つの線をどのように組み合わせるのか分かりません。

M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=M$AB) 
M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=M$TI) 

私が全体data.frame.Iを選択することはできません、私は列を指定することが重要であるが、他の同様の質問を探したが、どれも私の場合に適用されますように見えていないと私は適応することができていないいます既存の例。

M$China <- mapply(grepl, "CHINA|CHINESE|SINO", x=(M$AB|M$TI) 
+0

'地図試しSINO' [1] TRUE FALSE | CHINESE |(grepl、M、 "CHINA | SINO | CHINESE")' – akrun

+0

は、私は地図が何をするか正確にわからないが、それは、この出力に $ 'CHINAを与えますFALSE $ [1] FALSE TRUE FALSE $ [1] FALSE FALSE FALSE。これはデータフレーム全体で実行されているようですが、新しい列は追加されません。 – SCW

+0

これは 'list'形式です。 'data.frame'をラップするか、' M [] < - Map(grepl、 "CHINA | CHINESE | SINO"、M) ' – akrun

答えて

3

を使用して::

M$China <- !!rowSums(sapply(M[1:2], grepl, pattern = "CHINA|CHINESE|SINO")) 

が与える:これはどのような私には理にかなっている

> M 
        AB      TI  AU China 
1 CHINAS PARTY CONGRESS AMERICAN FOREIGN POLICY AUTHOR 1 TRUE 
2 JAPAN-US RELATIONS  CHINESE ATTEMPTS TO AUTHOR 2 TRUE 
3  JAPAN TRIES TO   BRITAIN HAS TEA AUTHOR 3 FALSE 

これは何:

  • sapply(M[1:2], grepl, pattern = "CHINA|CHINESE|SINO")は、2つのABTIの列をループし、パターンの一部("CHINA|CHINESE|SINO")が存在するかどうかを調べます。
  • TRUE/FALSE値の行列を返します-call sapply

  • は: rowSums

     AB TI 
    [1,] TRUE FALSE 
    [2,] FALSE TRUE 
    [3,] FALSE FALSE 
    
  • あなたは各行が持っているどのように多くのTRUE - 値を確認してください。

  • rowSumsの前で!!を追加することで、あなたはFALSEにゼロTRUEより-call高いrowSumsからのすべての値およびすべてのエロスを変換します。
+0

はい、それは動作します!それを完全に理解してはいけませんが、M [1:2]で私が望む任意の列番号を指定できます。 – SCW

+0

@SCW '1:2'は実際に列の位置を指定します – Jaap

+0

ありがとうございました! – SCW

1

我々は|

M$China <- Reduce(`|`, Map(grepl, "CHINA|CHINESE|SINO", M)) 
M 
#      AB      TI  AU China 
#1 CHINAS PARTY CONGRESS AMERICAN FOREIGN POLICY AUTHOR 1 TRUE 
#2 JAPAN-US RELATIONS  CHINESE ATTEMPTS TO AUTHOR 2 TRUE 
#3  JAPAN TRIES TO   BRITAIN HAS TEA AUTHOR 3 FALSE 
を使用して logicalベクトルに Reduce、その後、それを、単一のベクターに崩壊列をループに Mapを使用し、 list logicalのベクトルを取得するために patternを適用する必要がある場合 tidyverse


、または同じ方法論を使用して10

関連する問題