Учитывая пример данных sampleDT
ниже, я был бы признателен за любую помощь в создании функции, которая эффективно выполняет следующее:
Для каждой переменной, имя которой начинается с dollar
:
do 3-(5/j)
в тех строках, где sampleDT$employer==1
;
do 2*j
в тех строках, где sampleDT$employer==0
;
поместите результат операции в новую переменную, расположенную в столбце рядом с той, где она была основана;
сохранить значения dollar.wage_1
без изменений;
помещает вывод операции в новую переменную euro.wage_x
, имя которой заменяет только dollar
на euro
в исходной переменной dollar.wage_x
.x
- это число dollar.wage
переменных.
создает новые переменные с именем division.wage_x
, которые содержат для каждой пары dollar.wage_x
и euro.wage_x
результат деления dollar.wage_x
by euro.wage_x
.
Где j
обозначает значения, которые принимают переменные dollar.wage_1:dollar.wage_10
.
Пример данных
sampleDT<-structure(list(id = 1:10, N = c(10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L), A = c(62L, 96L, 17L, 41L, 212L, 143L, 143L,
143L, 73L, 73L), B = c(3L, 1L, 0L, 2L, 170L, 21L, 0L, 33L, 62L,
17L), C = c(0.05, 0.01, 0, 0.05, 0.8, 0.15, 0, 0.23, 0.85, 0.23
), employer = c(1L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 0L), F = c(0L,
0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L), G = c(1.94, 1.19, 1.16,
1.16, 1.13, 1.13, 1.13, 1.13, 1.12, 1.12), H = c(0.14, 0.24,
0.28, 0.28, 0.21, 0.12, 0.17, 0.07, 0.14, 0.12), dollar.wage_1 = c(1.94,
1.19, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_2 = c(1.93,
1.18, 3.15, 3.15, 1.12, 1.12, 2.12, 1.12, 1.11, 1.11), dollar.wage_3 = c(1.95,
1.19, 3.16, 3.16, 1.14, 1.13, 2.13, 1.13, 1.13, 1.13), dollar.wage_4 = c(1.94,
1.18, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_5 = c(1.94,
1.19, 3.16, 3.16, 1.14, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_6 = c(1.94,
1.18, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_7 = c(1.94,
1.19, 3.16, 3.16, 1.14, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_8 = c(1.94,
1.19, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_9 = c(1.94,
1.19, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12), dollar.wage_10 = c(1.94,
1.19, 3.16, 3.16, 1.13, 1.13, 2.13, 1.13, 1.12, 1.12)), row.names = c(NA,
-10L), class = "data.frame")
Выходной сигнал
id N A B C employer F G H dollar.wage_1 dollar.wage_2 dollar.wage_3 dollar.wage_4 dollar.wage_5 dollar.wage_6 dollar.wage_7 dollar.wage_8 dollar.wage_9 dollar.wage_10
1 10 62 3 0.05 1 0 1.94 0.14 1.94 1.93 1.95 1.94 1.94 1.94 1.94 1.94 1.94 1.94
2 10 96 1 0.01 1 0 1.19 0.24 1.19 1.18 1.19 1.18 1.19 1.18 1.19 1.19 1.19 1.19
3 10 17 0 0.00 0 0 1.16 0.28 3.16 3.15 3.16 3.16 3.16 3.16 3.16 3.16 3.16 3.16
Я ищу эффективный способ сделать это, потому что мой фактический набор данных содержит более 1000 переменных dollar.wage_x
, гдеx > 1000
.
Заранее благодарен за любую помощь.