2014-03-06 2 views
0

"Column 5"의 문자열이 "TRUE"인 경우 데이터 프레임에 새 열을 만드는 방법을 알고 있습니다. "Column 6"의 긴 문자열에 포함되어 있습니다. [r, c] locational references를 사용하는 대신 내 열의 이름을 참조하여이 작업을 수행 할 수 있습니까? 나는 "열 5 열 6"사물을 언급에 대해 긴장 프로그래머로 어떻게 열의 위치 참조에 의존하지 않고 데이터 프레임의 행을 반복합니까 R

rows = NULL 

for(i in 1:length(excptn1[,1])) 
{ 
    rows[i] <- grepl(excptn1[i,5],excptn1[i,6], perl=TRUE) 
} 

는 ... 내가 의존하지 않아요 그래서 그 열에서 캡처 된 변수의 이름을 참조 할 내 소스 파일에 항상 동일한 순서로 열이 있습니다. 게다가 나는 그 위치 참조를 잊어 버리고 위치 참조가 나중에 실패하게 만드는 코드의 초기에 뭔가를 추가 할 수 있습니다 ... 일반적으로 (예 : 특정 위치에서의 특정 순서보다는) 열 이름의 관점에서 생각할 수 있습니다. 시간) 강력한 생산 강도 코드를 작성하는 것이 훨씬 쉽습니다. R은 보이지 않지만

How do I perform a function on each row of a data frame and have just one element of the output inserted as a new column in that row

매우 유연가 많이 부족한 것 같다 ...

는이 사이트에 관련된 질문을 발견하고 내가 피하려고 입지 참조의 같은 종류를 사용 확장 가능한 생산력 코드에서 원하는 기능 ... 그러나 나는 틀렸고 다르게 배울 수 있기를 바라고 있습니다.

감사합니다.

답변

2

두 가지 방법으로 오히려 지수보다는 이름으로 열을 참조 할 수 있습니다 :

rows[i] <- grepl(excptn1[i,"colname"],excptn1[i,"othercolname"], perl=TRUE) 

또는

rows[i] <- grepl(excptn1$colname[i],excptn1$othercolname[i], perl=TRUE) 

마지막으로, 대부분의 R 프로그래머로 이런 짓을 했을까 참고 :

rows = sapply(1:nrow(excptn), grepl(excptn1$colname[i],excptn1$othercolname[i], perl=TRUE)) 

이 문제가 피하는 한 가지 방법은 각 반복에서 벡터 크기를 늘리는 오버 헤드입니다.

+0

더 자세히 설명해 주시겠습니까? 'grepl'의 첫 번째 인수는 제가 아는 한 정규 표현식이어야합니다. –

+0

@RScriv : 사과 : 저는 grepl이 두 번째 인수를 통해 벡터화하지만 첫 번째 인수는 벡터화하지 않는다는 것을 잊었습니다. 수정하여 수정했습니다. –

+0

고마워요! 내 열을 참조하려는 내 주위에 인용 부호가 누락되었습니다. – user3381203

0

더 빨리 수행하려면 stringi 패키지의 stri_match_first_regex 기능을 사용하십시오.

예 :

require(stringi) 

ramka < - data.frame (= 문자 foo에 [1 : 3], 바 = C ("ALA", "MA", "koteczka"))

> ramka 
    foo  bar 
1 a  ala 
2 b  ma 
3 c koteczka 

> stri_match_first_regex(str=ramka$bar, pattern=ramka$foo) 
    [,1] 
[1,] "a" 
[2,] NA 
[3,] "c"