Sto cercando un modo per manipolare più colonne in un data.table in R. Come devo affrontare le colonne dinamicamente e un secondo input, non ero in grado di trova una risposta.Cambiare più colonne in data.table r
L'idea è di indice due o più serie in una certa data dividendo tutti i valori per il valore della data es:
set.seed(132)
# simulate some data
dt <- data.table(date = seq(from = as.Date("2000-01-01"), by = "days", length.out = 10),
X1 = cumsum(rnorm(10)),
X2 = cumsum(rnorm(10)))
# set a date for the index
indexDate <- as.Date("2000-01-05")
# get the column names to be able to select the columns dynamically
cols <- colnames(dt)
cols <- cols[substr(cols, 1, 1) == "X"]
Parte 1: Il data.frame Easy/diffusa approccio
df <- as.data.frame(dt)
# get the right rownumber for the indexDate
rownum <- max((1:nrow(df))*(df$date==indexDate))
# use apply to iterate over all columns
df[, cols] <- apply(df[, cols],
2,
function(x, i){x/x[i]}, i = rownum)
Part 2: The (veloce) approccio data.table Finora il mio approccio data.table assomiglia a questo:
for(nam in cols) {
div <- as.numeric(dt[rownum, nam, with = FALSE])
dt[ ,
nam := dt[,nam, with = FALSE]/div,
with=FALSE]
}
in particolare tutti gli with = FALSE
non sembrano molto simili a data.table.
Conosci qualche modo più veloce/elegante per eseguire questa operazione?
Qualsiasi idea è molto apprezzata!