У меня есть большая таблица данных в R с несколькими столбцами со значениями в долларах. В другой колонке у меня есть номер корректировки инфляции. Я пытаюсь выяснить, как обновить каждую из моих денежных столбцов, умножив их на столбец корректировки инфляции. Предположим, что у меня есть данные:
DT <- data.table(id=1:1000,year=round(runif(1000)*10),
inc1 = runif(1000), inc2 = runif(1000), inc3 = runif(1000),
deflator = rnorm(1000))
который дает результат:
id year inc1 inc2 inc3 deflator
1: 1 8 0.4754808 0.6678110 0.41533976 -0.64126988
2: 2 2 0.6568746 0.7765634 0.70616373 0.39687915
3: 3 6 0.8192947 0.9236281 0.90002534 -0.69545700
4: 4 4 0.7781929 0.1624902 0.17565790 0.05263055
5: 5 7 0.6232520 0.8024975 0.86449836 0.70781887
---
996: 996 2 0.9676383 0.2238746 0.19822000 0.78564836
997: 997 9 0.9877410 0.5783748 0.57497438 -1.63365223
998: 998 8 0.2220570 0.6500632 0.19814932 1.00260174
999: 999 3 0.4793767 0.2830457 0.54835581 1.04168818
1000: 1000 8 0.2003476 0.6121637 0.02921505 0.34933690
в действительности у меня есть inc1
- inc100
, а не только три переменные, и я хочу выяснить способ выполнения этого действия:
DT[, inc1 := inc1 * deflator]
для каждой из моих 100 столбцов дохода (inc1, inc2, inc3 в поддельных данных выше). У меня будет более 100 столбцов в будущем, поэтому я хотел бы выяснить способ циклического действия над столбцами. Есть ли способ сделать это для всех столбцов дохода сразу?
Я хотел бы сделать что-то вроде:
inc_cols = c(inc1, inc2, inc3)
DT[, inc_cols := lapply(inc_cols,function(x)= x * deflator),]
или
DT[, inc_cols := lapply(.SD,function(x)= x * deflator),.SDcols = inc_cols]
но ни одна из них не работает. Я также попытался использовать функцию get()
, чтобы очистить ее. deflator
- это ссылка на столбец, например:
DT[, inc_cols := lapply(.SD,function(x)= x * get(deflator)),.SDcols = inc_cols]
но не повезло. Я также попытался перебрать переменные с чем-то вроде:
for (var in inc_cols) {
print(var)
DT[, get(var) := get(var) *infAdj2010_mult]
}
который возвращает
[1] "inc1"
Error in get(var) : object 'inc1' not found
Я понимаю, что это, вероятно, прямой вопрос, и я попытался найти другие вопросы здесь и различные онлайн-руководства и учебные пособия, но я не могу найти пример, соответствующий моей конкретной проблеме. Это похоже на question, но не совсем.
Спасибо за вашу помощь!