2012-02-04 2 views
4

변수가 actor 인 문자열이고 "military forces of guinea-bissau (1989-1992)"과 같은 값을 포함하고 다른 많은 값은 상당히 복잡합니다. 나는 을 사용하여 다양한 액터 유형과 일치하는 문자 패턴을 찾습니다. 예를 들어 actor에 이 있고 "mutiny of"을 포함하지 않고 actor 변수에 country 문자열이 포함되어있는 경우 새로운 변수 actor_type1으로 코딩하고 싶습니다.grep return에 기반한 코드 새 변수를 코드화합니다

일부 무서운 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" | 

답변

5

데이터는 data.frame 안양에있는 경우 :

> 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

첫 번째 부분이 작동합니다. 그래도 두 번째 부분에서 어떤 일이 벌어지고 있는지 이해하지 못합니다. 나는 x, x가 무엇인지, 지표가 어디에서 왔는지, 그들이 무엇을 선택하는지 알지 못한다. 또한, apply()가 함수 인수를 취하는 것을 알고 있지만, grepl()이 적용 할 경우 apply() 호출에서 function (x)이 여전히 유효합니다. 고마워. – Zach

+0

'grepl'은 하나의 문자열을'pattern' 인자로 취합니다. 국가 (2 열)와 배우 (1 열)를 비교하려면 '패턴 = 2 열'로 각 행에 'grepl'을 적용해야합니다. 나는 그것을하기 위해 익명의 함수를 만들었고 함수가 사용하는 변수는'x'이다. '.data.frame'의 각 행은'grepl'이 평가하는 두 개의 문자열의 벡터로 함수에 보내집니다. 명확한 진흙으로 나는 확실하다 ! – Justin

+0

아니, 실제로 말이 되네. 감사합니다 : – Zach