2017-11-10 11 views
0

각 행에 대한 내 DT의 첫 번째 열을 다른 열의 user_id와 동일하게 만드는 확실한 방법을 찾으려고합니다. 즉, 각 행에서 "user_id"검색을 수행하고 인스턴스가 발견 된 셀 전체를 반환해야합니다.R 문자열 값 검색을 기반으로 다른 열 값으로 열 값을 설정하십시오.

먼저 부분 일치가있는 열의 색인을 얻으려고 시도한 다음 첫 번째 열의 값을 설정하기 위해 이것을 사용했지만 작동하지 않았습니다. 예 :

 user_id   1    2 
    1:  N/A   300  user_id154 
    2:  N/A user_id301 user_id125040 
    3:  N/A   302   user_id2 

는 예를 들어, 나는 다음과 같은

**user_id** 
    user_id154 
    user_id301 
    user_id2 

내가 (내가 JSON 청소를 포함하지 않는하는 일의 대부분을 R에 서식 등의 데이터에 새로운 오전 명심하시기 바랍니다 가져올 파일 ..), 그리고 내 data.table가 1M 행을 초과합니다. 대답은 매우 효율적 일 필요는 없지만 확실히 5 분 이상 걸리지 않아야합니다. 그렇지 않으면 사장님이 너무 느린 것으로 간주됩니다.

는 희망이 거기에 "user_id"를 가지고 테이블 grep 첫 번째 값의 모든 행에 대해

+0

안녕하세요! 실례합니다.하지만 2 번 열을 어떻게 선택 하시겠습니까? 'user_id301'과 'user_id125040'이라는 두 가지 일치 항목이 있는데 두 번째 항목을 선택하게 한 이유는 무엇입니까? – Ale

+0

theres에'user_id'가 없으면 어떻게 될까요? – PoGibas

+0

@Ale, 실수를 수정했습니다. – Shannou06

답변

0

이해할 수 및 열 user_id에 결과를 넣습니다.

df$user_id <- apply(df, 1, function(x) grep("user_id", x, value = TRUE)[1]) 
+1

매력처럼 작동하고 효율적입니다. 감사! – Shannou06

+0

@ Shannou06 도와 드리겠습니다. :-) – PoGibas

1

나는 사람이 더 우아한 솔루션을 제공 할 것이라 확신하지만,이 트릭을 수행합니다

dt[, user_id := str_extract(str_c(1, 2), "user_id[0-9]*")] 

이 첫 번째 찾습니다, 각 행에 대해 한 후, 모든 열을 행 당 행을 결합 결합 된 값의 첫 번째 user_id.

(stringr 패키지 필요)

+0

PoGibas가 제공하는 솔루션이 더 쉽게 일반화 될 수 있습니다. 고맙습니다! :) – Shannou06