Grouping to form more than one comma-separated columns in data.table

Viewed 207

Problem: I basically want to group data based on the data.table syntax and in parallel create two or more columns which contain comma-separated values (as in the example below).

Approach: I thought about an lapply where I can provide a list of columns which I want to comma-separate; however this did not turn out as expected.

Any suggestions?

EDIT I am somehow looking for an approach where I only have to provide a list/vector of columns and then apply the function on this list (similar to the not-working lapply approach)

library(data.table)

dt <- data.table(
  x = c(1, 1, 1, 3, 3, 2),
  y = c("AA", "BB", "CC", "BB", "EE", "AA"),
  z = c("H", "A", "C", "Z", "F", "G")
)

## Attempts
dt[, paste0(y, collapse = ","), by = .(x)]
dt[, lapply(c("y", "z"), paste0, collapse = ","), by = x]

## Desired Ouput
   x  y         z
1: 1  AA,BB,CC  H, A, C
2: 3     BB,EE  Z, F
3: 2        AA  G

2 Answers
library(data.table) 
dt[, lapply(.SD, toString), by = x, .SDcols = names(dt)[sapply(dt, is.character)]]
dt_sum <- dt[,.(yy=toString(unique(y)),zz=toString(unique(z))),by=c("x")]
dt_sum
Related