You can try
cols <- c("chr", "start", "end")
df$sample.id <- do.call(paste, c(df[cols], sep="-"))
df
or
do.call(sprintf, c(df[cols], fmt='%s-%s-%s'))
Benchmarks
set.seed(24)
df1 <- as.data.frame(matrix(sample(0:1000, 3*1e6, replace=TRUE), ncol=3))
akrun1 <- function() {do.call(paste, c(df1, sep="-"))}
akrun2 <- function() {do.call(sprintf, c(df1, fmt='%s-%s-%s'))}
Mamoun <- function() {apply(df1, 1, paste0, collapse="-")}
library(microbenchmark)
microbenchmark(akrun1(), akrun2(), Mamoun(), unit='relative', times=20L)
data
df <- structure(list(chr = c(1L, 3L, 4L, 7L), start = c(68580000L,
15360000L, 122660000L, 48320000L), end = c(68640000L, 16000000L,
123500000L, 48400000L), CNA = c("loss", "loss", "gain", "loss"
)), .Names = c("chr", "start", "end", "CNA"), class = "data.frame",
row.names = c(NA, -4L))