Mam następujące dane:konstruowania ciąg identyfikatora dla każdego wiersza danych
library(data.table)
d = data.table(a = c(1:3), b = c(2:4))
i chciałby uzyskać ten wynik (w sposób, który będzie współpracować z dowolną liczbą kolumn):
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
Następujące prace, ale mam nadzieję znaleźć coś krótszego i bardziej czytelnego.
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 = "_")]
dzięki , to zdecydowanie bardziej czytelne z mniejszą liczbą zgłoszeń, aktualnym zwycięzcą R-golfa :) – eddi
Myślę, że 'apply' zamieni' d' na macierz. Tak więc będą kopie i mniej wydajności. – Roland
@Roland, masz rację, to wcale nie jest skuteczne. Alternatywą jest użycie 'by = names (d)', ale wtedy musisz wycofać wartości z powrotem do 'paste', lub musisz wyciągnąć' paste' na zewnątrz 'j' –