我在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="")))
如何在上面的代码中添加百分比?
答案 0 :(得分:4)
我们可以使用apply
与MARGIN = 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%)