2012-02-04 33 views
4

我有一個變量actor這是一個字符串,幷包含值如"military forces of guinea-bissau (1989-1992)"和大範圍的其他不同的值是相當複雜的。我一直在使用grep()找到符合不同類型演員的角色模式。例如,當actor包含"military forces of",不包含"mutiny of",並且字符串變量country也包含在變量actor中時,我想要將新變量actor_type編碼爲1基於grep返回代碼新變量R

我不知道如何有條件地創建這個新的變量,而不訴諸某種類型的可怕的循環。幫我!

數據看起來大致是這樣的:

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

如果數據是在一個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

打破了APPART:

!grepl('mutiny of', df$actor)grepl('military forces of', df$actor)滿足你的前兩個要求。最後一塊,apply(df,1,function(x) grepl(x[2],x[1]))爲演員中的國家排成一排,greps

+0

好,所以第一部分工作。我不太明白第二部分會發生什麼。我沒有得到x,x是什麼或指數來自何處,他們選擇了什麼。另外,我知道apply()需要一個函數參數,但是如果我們正在應用grepl(),爲什麼function(x)仍然在apply()調用中。謝謝btw。 – Zach 2012-02-04 21:23:14

+0

'grepl'將一個字符串作爲它的'pattern'參數。要比較國家(第2列)和演員(第1列),你需要''grep''應用'pattern =第2列'的每一行。我做了一個匿名函數來做這個,函數使用的變量是'x'。 '.data.frame'的每一行都作爲'grepl'評估的兩個字符串的向量發送給函數。清晰如泥我相信 ! – Justin 2012-02-04 21:26:20

+0

沒有,這實際上是有道理的。贊同:) – Zach 2012-02-04 21:33:55