ho i seguenti dati:costruire una stringa di identificazione per ciascuna riga di dati
library(data.table)
d = data.table(a = c(1:3), b = c(2:4))
e vorrebbe ottenere questo risultato (in modo tale da funzionare con numero arbitrario di colonne):
d[, c := paste0('a_', a, '_b_', b)]
d
# a b c
#1: 1 2 a_1_b_2
#2: 2 3 a_2_b_3
#3: 3 4 a_3_b_4
I seguenti lavori, ma spero di trovare qualcosa di più breve e più leggibile.
d = data.table(a = c(1:3), b = c(2:4))
d[, c := apply(mapply(paste, names(.SD), .SD, MoreArgs = list(sep = "_")),
1, paste, collapse = "_")]
grazie , questo è sicuramente più leggibile con meno applica, vincitore del R-golf attuale :) – eddi
Penso che 'apply' convertirà' d' in una matrice. Quindi, ci saranno copie e meno efficienza. – Roland
@Roland, sei corretto, questo non è affatto efficiente. Un'alternativa è usare 'by = names (d)' ma poi devi reinserire i valori in 'paste', o devi tirare' paste' all'esterno di 'j' –