Home > front end >  Percentage that each element appears in a vector
Percentage that each element appears in a vector

Time:11-10

I am looking for a way to take a vector and return the percentage that each element appears.

See below for the input vector and the expected result.

InputVector<-c(1,1,1,1,1,2,2,2,3,3)

ExpectedResult<-data.frame(Value=c(1,2,3), Percentile=c(0.5,0.3,0.2))

In this case, 1 appears 50% of the time, 2 appears 30% and 3 appears 20% of the time.

CodePudding user response:

Get the frequency count with table on the vector, apply proportions to convert it to proportions, and then reshape the named vector to a two column data.frame with stack in base R

stack(proportions(table(InputVector)))[2:1]

-output

  ind values
1   1    0.5
2   2    0.3
3   3    0.2

Or use tidyverse to get the frequency count and apply proportions on the frequency column 'n' to get the percentile

library(dplyr)
tibble(Value = InputVector) %>%
   count(Value) %>% 
   mutate(Percentile = proportions(n), n = NULL)

-output

# A tibble: 3 × 2
  Value Percentile
  <dbl>      <dbl>
1     1        0.5
2     2        0.3
3     3        0.2

CodePudding user response:

A little simpler, to get the proportions.

table(InputVector) / length(InputVector)

  •  Tags:  
  • r
  • Related