将两两类别组合在一起

问题描述:

我目前正在使用一个数据集来显示贷款的目的是贷款和每个贷款的相关贷款等级。将两两类别组合在一起

该数据集被称为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

由于您没有提供有用的数据,我会弥补的玩具例子:

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

虽然我认为它的呓语被禁止使用的包,还有一个base R的解决方案,并在可能取悦OP的方式呈现的最终结果。

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

太棒了!你激励我学习更多的基础R! – lebelinoz