2017-12-25 17 views
3

이미지에 표시된대로 고유 카테고리에 따라 열의 백분율을 계산하려고합니다. enter image description here그룹 변수에 의한 다중 숫자 변수의 백분율 계산

Tag가 한 열이며 Long 다른 열 여기서 우리는 이미지에서 볼 수 있듯이 . 그래서 여기 우리가 원하는 Long에 대한 백분율 계산 열 Unique Tag No을 기반으로. 모든 Tag=1 대한 예 및 다른 열마다 Tag 백분율 계산 Long1004 is 0.42%544 is 0.22%545 is 0.22%282 is 0.11% 마찬가지로 Total 2376.의 1 is 0.00%의 값 중 하나와 같은 Medium, ShortUrgent이 완료되어야한다.

df <- data.frame(Tag = c(1 ,1 ,1 ,1 ,1 ,2 ,2 ,2 ,2 ,2), 
     YPred = c("L1", "L2" ,"L3", "L4", "L5", "L1", "L2", "L3", "L4", "L5"), 
     Long = c(1004 , 544 , 545 , 282 , 1 ,2068 ,3006 ,3711 ,2342 , 33), 
     Medium = c(108, 252, 211, 149, 0, 17, 110, 248, 341, 4), 
     short = c(58, 118, 131, 73, 4, 0, 43, 150, 189,2), 
     Urgent = c(5, 70, 65, 24 , 5 ,22 ,18, 31 ,96, 2)) 

여기서 예상 출력은 컬러로 작성된 이미지 출력입니다. 감사합니다.

+0

지금까지 시도한 코드는 제공하지 않았습니다. 또한 원하는 출력이 더 자세히 표시되지 않습니다. 기존 열을 대체하고 addtional 열을 추가하고 총계를 인쇄하고 싶습니까? – vaettchen

답변

6

다음은 작업을 처리하는 한 가지 방법입니다. 데이터를 Tag으로 그룹화합니다. 그런 다음 4 개의 열 (즉, Long, Medium, shortUrgent)에 대해 설명한 계산을 수행하려고합니다. 귀하는 각 그룹의 각 값을 각 그룹의 값 합계로 나누어 mutate_at()에 있습니다.

library(dplyr) 

group_by(df, Tag) %>% 
mutate_at(.vars = vars(Long:Urgent), 
      .funs = funs(./sum(., na.rm = TRUE))) 

#  Tag YPred   Long  Medium  short  Urgent 
# <dbl> <fctr>  <dbl>  <dbl>  <dbl>  <dbl> 
# 1  1  L1 0.4225589226 0.150000000 0.151041667 0.02958580 
# 2  1  L2 0.2289562290 0.350000000 0.307291667 0.41420118 
# 3  1  L3 0.2293771044 0.293055556 0.341145833 0.38461538 
# 4  1  L4 0.1186868687 0.206944444 0.190104167 0.14201183 
# 5  1  L5 0.0004208754 0.000000000 0.010416667 0.02958580 
# 6  2  L1 0.1853046595 0.023611111 0.000000000 0.13017751 
# 7  2  L2 0.2693548387 0.152777778 0.111979167 0.10650888 
# 8  2  L3 0.3325268817 0.344444444 0.390625000 0.18343195 
# 9  2  L4 0.2098566308 0.473611111 0.492187500 0.56804734 
#10  2  L5 0.0029569892 0.005555556 0.005208333 0.01183432 
+0

'argument ".cols"오류가 발생합니다. 누락, 기본값 없음'내가 위의 코드를 Shiny enviorment 내부에서 실행할 때. r enoirment에서 완벽하게 잘 실행되고 있으면 반짝 반짝 빛나는 환경에서 지정된대로 오류가 발생합니다. –