Код новой переменной на основе возврата grep в R - PullRequest
4 голосов
/ 05 февраля 2012

У меня есть переменная actor, которая является строкой и содержит такие значения, как "military forces of guinea-bissau (1989-1992)", и большой диапазон других различных значений, которые довольно сложны.Я использовал grep(), чтобы найти шаблоны персонажей, которые соответствуют различным типам актеров.Например, я хотел бы закодировать новую переменную actor_type как 1, когда actor содержит "military forces of", не содержит "mutiny of", а строковая переменная country также содержится в переменной actor.

Я в недоумении относительно того, как условно создать эту новую переменную, не прибегая к какому-то ужасному циклу for.Помогите мне!

Данные выглядят примерно так:

|   | 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" |

1 Ответ

5 голосов
/ 05 февраля 2012

, если ваши данные находятся в data.frame df:

> 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 для страны в актере.

...