Я бы пошел на что-то вроде того, что предложил Джоран. Создание матрицы со строками, соответствующими каждому возможному случаю, а затем индексирование их каким-то умным способом.

ел бы умножить несколько столбцов в моем фрейме данных на вектор значений. Конкретный вектор значений изменяется в зависимости от значения в другом столбце.

--РЕДАКТИРОВАТЬ--

Что если я сделаю набор данных более сложным, то есть более двух условий, и условия будут случайным образом перетасовываться вокруг набора данных?

Вот пример моего набора данных:

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))

Но я не могу вернуть предварительно установленный фрейм данных. Есть ли способ выполнить эту операцию без поднабора фрейма данных, чтобы другие столбцы (например, Обработка, Виды) были сохранены?

Ответы на вопрос(4)

Ваш ответ на вопрос