하나의 열 (X)과 두 개의 열 (Y &)이있는 두 개의 데이터 프레임이 있습니다. Z) : 1, 2, 3, A, 5, B, 7, 8, C, D, 11, 12 etc.
X 열의 값을 Y 열의 값으로 바꾸기 X 열의 값이 Z 열의 값과 일치하는 경우에만
열 Y 특정에) 열 Z에 나타나는대로 (페어링이 같은 문자를 포함
열 X 가끔 번호를 1:99이 있지만 숫자 대신 몇 가지 문자, 즉있다 숫자 : 예 :
A 4
B 6
C 9
D 10
가 어떻게에 따라, 열 Z의 값으로 열 X에서 문자를 대체 할 수있는 열 Y의 문자 열 X 매치에서 문자 여부? 이 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 etc.
는 직접적인 merge
는 (나는 X의 모든 값을 유지해야합니다) 그리고 내가 조건부 sub
을 사용하는 방법을 모르겠어요 작동하지 않습니다되는 열 X 초래할 것이다. 또한 Y 및 Z 열에는 X 열보다 많은 행이 포함되어 있으므로 cbind
을 사용할 수 없습니다. 나는 아마도 최선의 방법이기는하지만, 아마도 regex
을 사용하는 데 익숙하지는 않습니다 ...
어떤 도움을 주시면 감사하겠습니다!
다음과 같이 for 루프 대신'match'를 사용할 수도 있습니다 :'tmp <- df2 $ Z [match (df1 $ X, df2 $ Y)]; df1 $ X <- ifelse (is.na (tmp), df1 $ X, tmp)' – Aaron
'for' 루프가 작동하는 것처럼 보이지만 30.000 행으로 매우 오래 걸립니다. 'grep '을 사용하여 교체해야하는 열 X의 행을 추출했지만 행 번호의 목록을'for' 루프에 통합하여 그 행에 대해서만 반복 할 수 있습니까? 편집 :'match' 신속하고 완벽하게 작동합니다! (즉,'df1 $ X'의 두 번째 언급을'as.character()'에 넣었 으면) – user1092247
데이터 프레임에서 열을 가져 와서 for 루프를 사용하면 for 루프가 훨씬 빨라집니다 벡터. – Gregor