2012-02-04 12 views
4

にコードするactorは文字列で、"military forces of guinea-bissau (1989-1992)"のような値と非常に複雑な値が含まれています。私はを使用して、さまざまなタイプのアクターに一致する文字パターンを見つけました。例えば、actor"military forces of"が含まれ、"mutiny of"が含まれておらず、actorという変数に文字列変数countryが含まれている場合、新しい変数actor_type1としてコーディングしたいとします。grep returnに基づくコードの新しい変数をR

私は、いくつかの恐ろしいforループに頼らずに、この新しい変数を条件付きで作成する方法を失っています。助けて!

データは、おおよそ次のようになります。あなたのデータはdata.frame DFである場合

| | actor            | country   | 
|---+----------------------------------------------------+-----------------| 
| 1 | "military forces of guinea-bissau"     | "guinea-bissau" | 
| 2 | "mutiny of military forces of guinea-bissau"  | "guinea-bissau" | 
| 3 | "unidentified armed group (guinea-bissau)"   | "guinea-bissau" | 
| 4 | "mfdc: movement of democratic forces of casamance" | "guinea-bissau" | 

答えて

5

> ifelse(!grepl('mutiny of' , df$actor) & grepl('military forces of',df$actor) & apply(df,1,function(x) grepl(x[2],x[1])),1,0) 
[1] 1 0 0 0 

greplは論理ベクトルを返し、これは、例えば、何に割り当てることができますdf$actor_type

そのアパートを壊す:

!grepl('mutiny of', df$actor)grepl('military forces of', df$actor)はあなたの最初の二つの要件を満たします。最後の部分はapply(df,1,function(x) grepl(x[2],x[1]))が行単位で、俳優の国の場合はgrepsとなります。

+0

最初の部分がうまく動作します。私は2番目の部分で何が起こっているのかかなり分かりません。私はx、xが何であるか、指標がどこから来ているのか、何を選んでいるのか分からない。また、apply()が関数の引数を取ることも知っていますが、grepl()が適用されている場合、なぜapply()コールでもfunction(x)はなぜですか?ありがとうbtw。 – Zach

+0

'grepl'は' pattern'引数として単一の文字列をとります。国(2列目)と俳優(1列目)を比較するには、 'pattern = column 2'を使って' grepl'を各行に '適用する '必要があります。私はそれを行うために無名関数を作成し、関数が使用する変数は 'x'です。 '.data.frame'の各行は' grepl'が評価する二つの文字列のベクトルとして関数に送られます。明確な泥として私は確信している ! – Justin

+0

これは実際には意味がありません。感謝しました:) – Zach

関連する問題