Mam tabelę danych, z którą chciałbym wykonać tę samą operację w niektórych kolumnach. Nazwy tych kolumn podane są w wektorze znakowym. W tym konkretnym przykładzie chciałbym pomnożyć wszystkie te kolumny przez -1.Jak zastosować tę samą funkcję do każdej określonej kolumny w data.table
Niektóre dane zabawki i wektor określający odpowiednie kolumny:
library(data.table)
dt <- data.table(a = 1:3, b = 1:3, d = 1:3)
cols <- c("a", "b")
Teraz robię to w ten sposób, zapętlenie nad wektor znaków:
for (col in 1:length(cols)) {
dt[ , eval(parse(text = paste0(cols[col], ":=-1*", cols[col])))]
}
Czy istnieje sposób, aby zrobić to bezpośrednio bez pętli for?
innym sposobem jest użycie 'set' z' for-loop'. Podejrzewam, że będzie szybciej. – Arun
@Arun Dokonałem edycji. Czy to miałeś na myśli? Nie użyłem wcześniej 'set'. – Frank
@Frank, bardzo! Unika tworzenia '.SD'. Mimo że dla tej konkretnej operacji, .SD nie powinno kosztować wiele, ponieważ nie jest tworzone dla każdego 'by'. Ale nadal wolę 'set' na to pytanie. – Arun