with(df, paste(a, b, sep=""))
И это должно быть быстрее, чем apply
.
О времени
Для 10000 строк получаем:
df <- data.frame(
a = sample(c("x","y"), 10000, replace=TRUE),
b = sample(1L:4L, 10000, replace=TRUE)
)
N = 100
mean(replicate(N, system.time( with(df, paste(a, b, sep="")) )["elapsed"]), trim=0.05)
# 0.005778
mean(replicate(N, system.time( apply(df, 1, paste, collapse="") )["elapsed"]), trim=0.05)
# 0.09611
Так что увеличение скорости видно за несколько тысяч.
Это потому, что решение Шейна вызывает paste
для каждой строки отдельно. Так что есть nrow(df)
звонков paste
, в моем решении один звонок.