создание функции для сравнения значений переменных с помощью арифметических операций на уровнях другой переменной - PullRequest
0 голосов
/ 08 декабря 2018

Мне нужна помощь в создании функции, которая выполняет следующие операции:

  • создает новую переменную с именем division
  • , помещенную в каждую строку r_n переменной dT$division результат деления значения соответствующей строки r_n из dT$result1 на значение каждой строки dT$result1 для dt$treat == A
  • создать новую переменную с именем operation
  • для каждой строки переменной operation execute dT$operation = (2*(dT$division-1))/(2*(dT$division-1)+1)

Где n в r_n - номер каждой строки во фрейме данных и принимает значения из1 to N, а N - общее количество наблюдений или строк в кадре данных.

# пример данных

(примечание: отредактировано для добавления переменной id, которая необходима для создания желаемой функции)

dT = read.table(header = TRUE, text = "
id group treat result1
1 0 A 0.1438 
2 0 A 0.237 
3 0 B 0.2774 
4 0 B 0.2774 
5 0 B 0.2093 
6 0 C 0.1206 
7 0 C 0.1707 
8 0 C 0.0699 
9 0 C 0.1351 
10 1 C 0.1206 
11 1 A 0.1438 
12 1 A 0.237 
13 1 B 0.2774 
14 1 B 0.2774 
15 1 B 0.2093 
16 1 C 0.1206 
17 1 C 0.1707 
18 1 C 0.0699
19 1 C 0.1351 
20 1 C 0.1206")

# вывод головки

(примечание: это случайная выборка строк из исходных данных, выбранных для облегчения иллюстрации концепции)

id group treat result1
1 0 A 0.014
2 0 A 0.02
3 0 B 0.20
4 1 A 0.14
5 1 B 0.27

# ожидаемый результат

(примечание: для dT $ Treat.denominator A2 и A3 в этом примере показан только визуальный элемент - поскольку мне нужно было опубликовать ожидаемый результат как можно скорее; это означает, что я рассчиталфактические значения переменных dT $ Division и операция dT $ только для dT $ Treat.denominator A1)

id group treat result1 treat.numerator treat.denominator division operation
1 0 A 0.01 A1 A1 1.00 0.00
2 0 A 0.02 A2 A1 1.64 0.56
3 0 B 0.20 B3 A1 20.00 0.97
4 1 A 0.14 A4 A1 14.00 0.96
5 1 B 0.27 B5 A1 27.00 0.98
1 0 A 0.01 A1 A2 1.00 0.00
2 0 A 0.02 A2 A2 1.64 0.56
3 0 B 0.20 B3 A2 20.00 0.97
4 1 A 0.14 A4 A2 14.00 0.96
5 1 B 0.27 B5 A2 27.00 0.98
1 0 A 0.01 A1 A3 1.00 0.00
2 0 A 0.02 A2 A3 1.64 0.56
3 0 B 0.20 B3 A3 20.00 0.97
4 1 A 0.14 A4 A3 14.00 0.96
5 1 B 0.27 B5 A3 27.00 0.98

Заранее благодарен за любую помощь.

1 Ответ

0 голосов
/ 08 февраля 2019
  1. создайте новую переменную с именем Division
  2. поместите в каждую строку r_n переменной dT $ Division результат деления значения соответствующей строки r_n в dT $ result1 на значениекаждая строка dT $ result1 для dt $ Treat == A

Ответ на шаги 1 и 2

  division<-dT$result1/dT$result1[dT$treat=="A"]  

  dT<-cbind(dT,division)

создать новую переменную с именем операция

для каждой строки операции с переменной выполнить dT $ operation = (2 * (dT $ Division-1)) / (2* (dT $ Division-1) +1)

Ответы на 3 и 4

dT$operation<-(2*(dT$division-1))/(2*(dT$division-1)+1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...