У меня есть фрейм данных, который выглядит как следующий пример (здесь есть фрейм данных, содержащий две симуляции для каждого раунда, состояния и лечения):
df <- data.frame(Sim=c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2),Round=c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2),Condition=c('A1','A1','A2','A2','A1','A1','A2','A2','B1','B1','B2','B2','B1','B1','B2','B2','A1','A1','A2','A2','A1','A1','A2','A2','B1','B1','B2','B2','B1','B1','B2','B2'),Treatment=c(1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2),Output=c(3,2.5,2.1,1.9,2.8,2.3,2.0,1.6,2.6,2.7,1.3,1.2,2.4,2.3,1,1.1,2,1.3,1.3,0.9,2,2.1,2.1,1.2,2,1.7,1.2,1,2,1.3,0.5,0.4))
Состояние охватывает четыре уровня: A1, A2, B1, B2.
Теперь я хотел бы манипулировать этим фреймом данных, чтобы получить Выход уменьшение (%), которое A2 производит на A1 (1- (A2 / A1) для каждого моделирования, раунда, условия и лечение. То же самое для B2 на B1 (1- (B2 / B1).
Мы должны получить новый dtaframe, похожий на этот («Новый вывод» здесь не основан на dataframe):
Round New condition Treatment Newoutput
1 1-(A2/A1) 1 0.3
1 1-(A2/A1) 1 0.24
...
1 1-(B2/B1) 2 0.5
1 1-(B2/B1) 2 0.56
...
2 1-(A2/A1) 1 0.43
2 1-(A2/A1) 1 0.23
...
2 1-(B2/B1) 1 0.4
2 1-(B2/B1) 1 0.5
...
Я пытался split
исходный фрейм данных, но не уверен, как я мог тогда работать с ним. Я также пытался работать непосредственно над фреймом данных, используя transform
. Пока безуспешно.
Заранее спасибо за любую помощь.