Tôi đang tìm cách điều khiển nhiều cột trong một data.table trong R. Vì tôi phải giải quyết các cột động cũng như đầu vào thứ hai, tôi không thể tìm một câu trả lời.Thay đổi nhiều Cột trong data.table r
Ý tưởng là để chỉ số hai hay một loạt hơn vào một ngày nhất định bằng cách chia tất cả các giá trị bằng giá trị kể từ ngày ví dụ:
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"]
Phần 1: Dễ dàng data.frame/áp dụng cách tiếp cận
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)
Phần 2: (nhanh) cách tiếp cận data.table Cho đến nay phương pháp data.table của tôi trông như thế này:
for(nam in cols) {
div <- as.numeric(dt[rownum, nam, with = FALSE])
dt[ ,
nam := dt[,nam, with = FALSE]/div,
with=FALSE]
}
đặc biệt là tất cả các with = FALSE
trông không giống như data.table.
Bạn có biết cách nào nhanh hơn/thanh lịch hơn để thực hiện thao tác này không?
Bất kỳ ý tưởng nào được đánh giá cao!