Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Creating a col that adds a numeric value based on the order of a character string in R

I have responses where I solicited rankings of issues and the response I have for each individual look like this:

structure(list(Rank = "Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);Economic impacts;Climate change;"), row.names = c(NA, 
-1L), class = "data.frame")

I am trying to create a column that gives the numeric value of each Rank based on the order of each string. I would want five columns for each individual string separated by ";" that would look like this:

Shifting angler preferences and behaviors 
5

Increasing effort and fishing power
4

R3 (Recruitment, Retention, and Reactivation)
3

Economic impacts
2

Climate change
1

This is just a single response where we solicited the rankings of the issues and I am trying to visualize the responses.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Thanks!

>Solution :

Just a guess, I think you want to know the order in which each of those ;-delimited substrings appears in the vector, where first is "highest priority (and therefore 5), etc. I’ll assume that the substrings will never change.

fun <- function(x, table = NA) {
  if (anyNA(table)) {
    # obtained in the question, assuming that these 
    table <- trimws(strsplit("Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);Economic impacts;Climate change", ";")[[1]])
  }
  bind_rows(
    lapply(strsplit(x, ";"),
           function(z) setNames(length(table) + 1L - match(table, trimws(z)), table))
  )
}

Demonstration, using augmented data:

quux <- structure(list(Rank = c("Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);Economic impacts;Climate change;", "Economic impacts;Climate change;Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);")), class = "data.frame", row.names = c(NA, -2L))

out <- quux %>%
  mutate(fun(Rank))
str(out)
# 'data.frame': 2 obs. of  6 variables:
#  $ Rank                                         : chr  "Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and R"| __truncated__ "Economic impacts;Climate change;Shifting angler preferences and behaviors;Increasing effort and fishing power;R"| __truncated__
#  $ Shifting angler preferences and behaviors    : int  5 3
#  $ Increasing effort and fishing power          : int  4 2
#  $ R3 (Recruitment, Retention, and Reactivation): int  3 1
#  $ Economic impacts                             : int  2 5
#  $ Climate change                               : int  1 4
out
#                                                                                                                                                           Rank Shifting angler preferences and behaviors Increasing effort and fishing power R3 (Recruitment, Retention, and Reactivation) Economic impacts Climate change
# 1 Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);Economic impacts;Climate change;                                         5                                   4                                             3                2              1
# 2 Economic impacts;Climate change;Shifting angler preferences and behaviors;Increasing effort and fishing power;R3 (Recruitment, Retention, and Reactivation);                                         3                                   2                                             1                5              4
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading