2017-10-19 13 views
-3

저는 현재 대출 목적과 각 대출에 대한 대출 등급으로 대출이 표시되는 데이터 세트로 작업하고 있습니다.그룹화 된 카테고리 그룹 함께

데이터 집합은 loancase와 다른 열이 등급 동안 열 중 하나는 목적이다라고합니다. enter image description here

아래에는 비율로 쌍으로 채워질 행렬이 있습니다. 각 행은 합계가 100 %이어야 함을 의미하며 각 항목은 해당 학년을받은 특정 목적에 대한 비율입니다. 예를 들어 [Car,]의 행은 20, 20, 0, 20, 0, 40과 같이 보일 수 있습니다.

현재 데이터 자리 표시자는 NA이고이를 벡터 원하는 각 항목을 나열합니다.

matrix(data = NA, nrow = 14, ncol = 7, dimnames = list(levels(loancase$purpose), levels(loancase$grade))) 

enter image description here

어떻게 원하는 값과 각 항목의 작성이 목표를 달성합니까? 나는 현재 tapply()를 사용하고 있지만 그것을 성취 할 방법을 모른다 고 생각하고있다. 다음은 "NA"대신에 갈 것이지만 현재로서는 올바르지 않은 현재 코드입니다. 당신이 사용할 수있는 데이터를 제공하지 않았기 때문에

grades.per.purpose = tapply(loancase$grade, levels(loancase$purpose), sum) 
+3

데이터가 이미지가 아닌 일반 텍스트로 제공되므로 사용자가 복사/붙여 넣기를 할 수 있습니다. – neilfws

+0

코드 관련 줄을 추가했습니다. – user1713336

답변

1

, 나는 장난감 예를 구성하는 것입니다 : 우리가 보여주고 싶은

df = read.table(text = "grade purpose amount 
      A Car 100 
      B Car 200 
      C Car 100 
      A Moving 200 
      B Moving 50 
      B Moving 50", header = TRUE) 

Car 대출이다 50 % B 급, 25 % A-와 C 등급. 그리고 Moving 대부는 67 % A 등급, 33 % B 등급입니다.

library(dplyr) 
x = df %>% 
    group_by(purpose) %>% 
    mutate(purpose.total = sum(amount)) %>% 
    group_by(purpose, grade) %>% 
    summarise(percent = sum(amount/purpose.total)) 

결과는 :

당신이 질문처럼 사각형으로 그룹을하려면
purpose grade percent 
1  Car  A 0.2500000 
2  Car  B 0.5000000 
3  Car  C 0.2500000 
4 Moving  A 0.6666667 
5 Moving  B 0.3333333 

tidyr 라이브러리를 시도

나는 그룹화 및 요약하는 이런 종류의 dplyr 라이브러리를 사용하려면 :

tidyr::spread(x, key = grade, value = percent, fill = 0) 

결과 :

나는 그것의 넌센스이 패키지를 사용하는 것을 금지 할 수 있다고 생각하지만
purpose   A   B  C 
1  Car 0.2500000 0.5000000 0.25 
2 Moving 0.6666667 0.3333333 0.00  
+0

이것은 내가 성취하려고 노력하는 결과와 정확히 일치합니다. 불행히도 이러한 목적으로 외부 라이브러리를 사용할 수 없습니다. 네이티브 R 함수를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? – user1713336

+0

@ user1713336 외부 라이브러리를 허용하는 경우 R을 사용하는 것이 훨씬 쉽습니다. 패키지를 가져올 수 없습니까? – lebelinoz

+0

나는 라이브러리도 사용하고 싶지만이 프로젝트를 위해 라이브러리를 사용할 수 없다. – user1713336

1

은 영업 이익을 기쁘게 할 수있는 방법으로 제시 한 최종 결과와 base R 솔루션이 있습니다.

xt <- xtabs(amount ~ grade + purpose, df) 
t(xt)/colSums(xt) 
+0

Brilliant! 당신은 저에게베이스 R을 더 배우기 위해 영감을주었습니다! – lebelinoz