Home > Blockchain >  Hos can I add a column porcentaje based on other column in my data frame?
Hos can I add a column porcentaje based on other column in my data frame?

Time:11-15

I would like to create a column in my data frame that gives the percentage of each category. The total (100%) would be the summary of the column Score.

My data looks like

Client  Score
  <chr> <int>
1 RP      125
2 DM      30

Expected

Client  Score    %
  <chr> <int>
1 RP      125    80.6
2 DM      30     19.3

Thanks!

CodePudding user response:

Note special character in column names is not good.

library(dplyr)
df %>% 
  mutate(`%` = round(Score/sum(Score, na.rm = TRUE)*100, 1))
  Client Score    %
1     RP   125 80.6
2     DM    30 19.4

CodePudding user response:

Probably the best way is to use dplyr. I recreated your data below and used the mutate function to create a new column on the dataframe.

#Creation of data
Client <- c("RP","DM")
Score <- c(125,30)
DF <- data.frame(Client,Score)
DF

#install.packages("dplyr") #Remove first # and install if library doesn't load
library(dplyr)  #If this doesn't run, install library using code above.

#Shows new column
DF %>% 
  mutate("%" = round((Score/sum(Score))*100,1))

#Overwrites dataframe with new column added
DF %>% 
  mutate("%" = round((Score/sum(Score))*100,1)) -> DF

Using base R functions the same goal can be achieved.

X <- round((DF$Score/sum(DF$Score))*100,1) #Creation of percentage
DF$"%" <- X #Storage of X as % to dataframe
DF #Check to see it exists

CodePudding user response:

In base R, may use proportions

df[["%"]] <-  round(proportions(df$Score) * 100, 1)

-output

> df
  Client Score    %
1     RP   125 80.6
2     DM    30 19.4
  • Related