2016-06-14 4 views
-1

저는 초보자입니다. 나는 here에서 가져온 데이터 집합을 다른 속성을 가진 사람 프로필로 구성하고 profession은 그 중 하나입니다. 관리자, 블루 칼라, 기업가, 주부, 경영진, 은퇴자, 자영업자, 서비스, 학생, 기술자, 실업자, 알 수없는 직업이 12 개 있습니다.1 문자열 열에서 새 숫자 열 만들기

해당 데이터 세트에 K-NN을 적용하고 싶습니다. 따라서 직업 칼럼을 12 개의 새로운 칼럼에 배포하고 1을 해당 직업에, 0을 다른 11 개의 전문 직업에 할당하고 싶습니다. 그 사람에게 속한 것이 아닙니다.

나는 foreach packagefor loops을 시도했지만 성공하지 못했습니다. 나는 foreach와 함께 작동 할 수있는 게 아니에요, 나는 다음과 같은 코드에서 다음에 무엇을 해야할지하지 않습니다

jobs <- data[,2] 
jobs 
for (job in jobs) { 
    print(job) 
    #No idea how to create the new columns here, based on if conditionals 
} 

방법이 작업을 수행하는 가장 좋은 방법이 있을까요?

감사합니다.


+0

데이터의 재현 가능한 샘플을 추가 할 수 있습니까? (질문이 아니라 링크에서 직접 액세스 할 수 있습니까?) –

+0

정확히 무엇을 하려는지는 모르지만 R에서 'factor' 함수를 살펴보십시오. – Marsenau

+0

@BryanGoggin 데이터 샘플은 무엇을 의미합니까? .csv 파일을 여기에 복사하여 붙여 넣으시겠습니까? –

답변

0

당신은 확실히 루프를 사용하여 문제를 해결할 수 있습니다,하지만 난 장기적으로 더 효율적인 솔루션을 제안 할 수 있습니다 : reshape2 패키지 (https://cran.r-project.org/web/packages/reshape2/을).

오브젝트 뱅크에서 bank-full.csv의 데이터를 R로 읽습니다. 다음 reshape2 패키지, 다운로드 설치 및로드해야 : 데이터는 다음 관찰 열에 행과 작업에있는 형식으로 형성 될 수있다

install.packages("reshape2") 
library(reshape2) 

. 액세서리 id 열의 첫 데이터에 추가된다

bank$id<-1:nrow(bank) 

을 그리고, 데이터 프레임 bank에서 열 (2) 및 18 (작업 및 ID)를 취득하고, 상기 형태로 캐스팅을 수행 할 수있는 바와 같이 :

tmp<-dcast(bank[,c(2, 18)], id~job, length) 

그러면 각 작업에는 고유 한 열이있는 새로운 데이터 프레임 tmp을 제공해야합니다. 모든 ID는 데이터에 한 번만 나타나므로 데이터를 집계하는 dcast 함수에 사용 된 length 함수는 모든 열에 0과 1을 넣습니다. 대괄호 안에

bank<-cbind(bank[,-18], tmp[,-1]) 

음의 첨자는 데이터 집합에서 열을 삭제, 그래서 이것은 동시에 당신이 id 열을 없애하자 :

마지막으로, 새로운 열은 원래 데이터 세트에 추가 할 수 있습니다.

bank2<-cbind(bank, model.matrix(~ 0 + job, bank)) 

이 당신에게 새로운 열의 각 작업과 데이터 프레임을 제공한다 :


또,이 작업을 수행하는 더 효율적인 방법은 기능 model.matrix를 사용하는 것입니다. 그러나 열 이름을 조금 변경합니다 (작업 열의 시작 부분에 작업이 추가됨).

+0

감사합니다. 실제로 두 가지 방법 모두 성공했습니다! 이제 작업 열을 삭제하고 다른 열 문자열 값을 숫자 열로 변경해야합니다. (-1, 0, 1 등). 하지만 위의 코드에서 마지막이자 가장 효율적인 코드는 구문을 이해하지 못했습니다. 설명해 주시겠습니까? cbind는 정확히 무엇을합니까? model.matrix와 그 인수는 무엇입니까? –

+0

함수'model.matrix'는 R 인자 ("범주 형 변수")를 선형 모델 (회귀)에서 사용할 수있는 모델 행렬로 변환합니다. 모델 행렬을 구성하는 방법을 지정하는 수식을 인수로 사용합니다. 이 예의 수식은 행렬에서 요격 항을 제거하고 (용어 0, 1로 채워진 열) 개별 작업 열의 수준을 개별 열로 다시 코딩합니다. '? model.matrix'와'? formula'에 대한 R 도움말을 읽고 싶을 수도 있습니다. 함수 cbind는 두 객체의 열을 결합하여 새 객체를 만듭니다. –

+0

'model.matrix (~ 0 + job, bank))'와 같이'model.matrix'가 실행하는 것을 테스트 할 수 있습니다. 결과 객체의 첫 번째 행이 몇 개 있습니다. –

관련 문제