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"