Я бы пошел на что-то вроде того, что предложил Джоран. Создание матрицы со строками, соответствующими каждому возможному случаю, а затем индексирование их каким-то умным способом.
ел бы умножить несколько столбцов в моем фрейме данных на вектор значений. Конкретный вектор значений изменяется в зависимости от значения в другом столбце.
--РЕДАКТИРОВАТЬ--
Что если я сделаю набор данных более сложным, то есть более двух условий, и условия будут случайным образом перетасовываться вокруг набора данных?
Вот пример моего набора данных:
df=data.frame(
Treatment=(rep(LETTERS[1:4],each=2)),
Species=rep(1:4,each=2),
Value1=c(0,0,1,3,4,2,0,0),
Value2=c(0,0,3,4,2,1,4,5),
Value3=c(0,2,4,5,2,1,4,5),
Condition=c("A","B","A","C","B","A","B","C")
)
Который выглядит как:
Treatment Species Value1 Value2 Value3 Condition
A 1 0 0 0 A
A 1 0 0 2 B
B 2 1 3 4 A
B 2 3 4 5 C
C 3 4 2 2 B
C 3 2 1 1 A
D 4 0 4 4 B
D 4 0 5 5 C
ЕслиCondition=="A"
Я хотел бы умножить столбцы 3-5 на векторc(1,2,3)
, ЕслиCondition=="B"
Я хотел бы умножить столбцы 3-5 на векторc(4,5,6)
, ЕслиCondition=="C"
Я хотел бы умножить столбцы 3-5 на векторc(0,1,0)
, Поэтому результирующий фрейм данных будет выглядеть так:
Treatment Species Value1 Value2 Value3 Condition
A 1 0 0 0 A
A 1 0 0 12 B
B 2 1 6 12 A
B 2 0 4 0 C
C 3 16 10 12 B
C 3 2 2 3 A
D 4 0 20 24 B
D 4 0 5 0 C
Я попытался поднастроить фрейм данных и умножить на вектор:
t(t(subset(df[,3:5],df[,6]=="A")) * c(1,2,3))
Но я не могу вернуть предварительно установленный фрейм данных. Есть ли способ выполнить эту операцию без поднабора фрейма данных, чтобы другие столбцы (например, Обработка, Виды) были сохранены?