2017-10-19 76 views
-3

我目前正在使用一個數據集來顯示貸款的目的是貸款和每個貸款的相關貸款等級。將兩兩類別組合在一起

該數據集被稱爲loancase和列的一個是目的而另一列是級。 enter image description here

下面我有矩陣,它是按比例配對填充的。每行應該達到100%,這意味着每個條目都是該特定等級的比例。例如,行[Car,]可能看起來像20,20,0,0,20,0,0 40.

請注意,當前數據佔位符是NA,我試圖用一個向量列出每個所需的條目。

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

enter image description here

如何實現與所需值的每個條目填充這個目標?我目前認爲我使用tapply(),但不知道如何實現這一點。現在的代碼將代替「不適用」,但現在不正確。

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級。

我喜歡用dplyr庫這種分組和總結的:

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庫:

​​

結果:

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的解決方案,並在可能取悅OP的方式呈現的最終結果。

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

太棒了!你激勵我學習更多的基礎R! – lebelinoz