查找非零列中的百分比

时间:2017-04-28 09:37:20

标签: r

我在R

中有以下数据框
    ID     IT      FMCG     CDGS
    A       0       20       50
    B       10      30       67
    C       23      0        40

我想要非零列的百分比份额并在新列中打印。例如FMCG(20 /(20 + 50))28%

所需的R数据帧

   ID      IT     FMCG    CDGS         Perc_Portfolio
   A        0      20      50        FMCG(28%),CDGS(72%)
   B       10      30      67       IT(10%),FMCG(28%),CDGS(62%) 
   C       23      0       40         IT(36%),CDGS(64%)  

依此类推,我使用以下代码来打印非零列名称

simplyfy2array(apply(df[2:4],1,function(x)paste(names(df[2:4])[x!=0],collapse="")))

如何在上面的代码中添加百分比?

2 个答案:

答案 0 :(得分:4)

我们可以使用applyMARGIN = 1循环遍历行,将非元素的元素分组,除以sum元素以创建百分比,{{1}使用paste

names

答案 1 :(得分:3)

使用dplyr

的另一个想法
library(dplyr)

df %>% 
 gather(val, var, -ID) %>% 
 filter(var != 0) %>% 
 group_by(ID) %>% 
 summarise(new = toString(paste0(val, '(', round(100*var/sum(var)), "%", ')')))

# A tibble: 3 × 2
#     ID                          new
#  <chr>                        <chr>
#1     A         FMCG(29%), CDGS(71%)
#2     B IT(9%), FMCG(28%), CDGS(63%)
#3     C           IT(37%), CDGS(63%)