Home > front end >  R combine month names with strings
R combine month names with strings

Time:02-08

I would like to combine each month name with three strings: 'min', 'max', 'mean'

I tried this:

paste(month.name,rep(c('min','max','mean'),12))

but, instead of "January min", "January max", "January mean",... I get a wrong sequence "January min" "February max" "March mean" ...

Do you have any suggestions? Thank you

bioglp

CodePudding user response:

put the rep around the months

paste(rep(month.name, each = 3), c("min","max","mean"))

# [1] "January min"    "January max"    "January mean"   "February min"  
# [5] "February max"   "February mean"  "March min"      "March max" 
# etc

CodePudding user response:

Keep it simple ;-)

month <- c("January", "February", "March")
value <- c("min", "max", "mean")
outer(month, value, paste)

     [,1]           [,2]           [,3]           
[1,] "January min"  "January max"  "January mean" 
[2,] "February min" "February max" "February mean"
[3,] "March min"    "March max"    "March mean"  

To get it in vector form use c():

c(outer(month, value, paste))

[1] "January min"   "February min"  "March min"     "January max"  
[5] "February max"  "March max"     "January mean"  "February mean"
[9] "March mean"   

c(t(outer(month, value, paste)))

[1] "January min"   "January max"   "January mean"  "February min" 
[5] "February max"  "February mean" "March min"     "March max"    
[9] "March mean"   

CodePudding user response:

Looks like you want to have the cross product over two sets so you can use the function expand_grid from the R package tidyr:

library(tidyverse)

expand_grid(
  month = c("January", "February", "March"),
  value = c("min", "max", "mean")
) %>%
  unite(everything(), col = "combined") %>%
  pull(combined)
#> [1] "January_min"   "January_max"   "January_mean"  "February_min" 
#> [5] "February_max"  "February_mean" "March_min"     "March_max"    
#> [9] "March_mean"

Created on 2022-02-08 by the reprex package (v2.0.1)

paste just zips the elements together so that 2 lists of 3 elements will be combined into one list of 3 elements.

CodePudding user response:

Here's a base R approach

c(t(sapply(1:length(min_max_mean), function(x) paste(month.name, min_max_mean[x]))))

[1] "January min"   "January max"   "January mean"  "Feburary min" 
[5] "Feburary max"  "Feburary mean" "March min"     "March max"    
[9] "March mean"    "April min"     "April max"     "April mean"   
[13] "May min"       "May max"       "May mean"     

CodePudding user response:

We can loop apply a vectorized function like paste to a vector of months

library(purrr)

month <- c("January", "February", "March")
value <- c("min", "max", "mean")

map(month, ~paste(.x, value, sep = ' ')) %>%
        unlist

[1] "January min"   "January max"   "January mean"  "February min"  "February max"  "February mean"
[7] "March min"     "March max"     "March mean"  
  •  Tags:  
  • Related