[R] concatenating columns in data.frame

Berry, Charles
Thu, 01 Jul 2021 18:02:38 -0000

> On Jul 1, 2021, at 7:36 AM, Micha Silver <tsvibar at gmail.com>
wrote:
>
> I need to create a new data.frame column as a concatenation of existing
character columns. But the number and name of the columns to concatenate needs
to be passed in dynamically. The code below does what I want, but seems very
clumsy. Any suggestions how to improve?
>
>
> df = data.frame("A"=sample(letters, 10),
"B"=sample(letters, 10), "C"=sample(letters,10),
"D"=sample(letters, 10))
>
> # Which columns to concat:
>
> use_columns = c("D", "B")
>
>
> UpdateCombo = function(df, use_columns) {
>     use_df = df[, use_columns]
>     combo_list = lapply(1:nrow(use_df), function(r) {
>     r_combo = paste(use_df[r,], collapse="_")
>     return(data.frame("Combo" = r_combo))
>     })
>     combo = do.call(rbind, combo_list)
>
>     names(combo) = "Combo"
>
>     return(combo)
>
> }
>
>
> combo_col = UpdateCombo(df, use_columns)
>
> df_combo = do.call(cbind, list(df, combo_col))
>
>


I'd do this:


UpdateCombo <-
  function(df, use_columns){
    pasteUnder <- function(...) paste(..., sep="_")
    do.call(pasteUnder, df[, use_columns])
  }

df_combo <- cbind(df, Combo=UpdateCombo(df, use_columns))

HTH,
Chuck