Если я правильно понимаю вопрос, то вам действительно нужны упорядоченные уровни факторов «Рыба» и «Картошка», с некоторыми дополнительными различиями на каждом уровне, представленными цифрами 1 и 2.
Использование следующих данных:
df <- read.table(text = "Condition SubNum Trial Num_Fish1 Num_Fish2 Num_Fries1 Num_Fries2 Health
Treatment 1 1 1 1 2 1 3
Treatment 1 2 0 3 4 1 5
Control 2 1 0 0 0 0 4
Control 2 2 0 0 0 0 5", header = T)
Я бы использовал tidyr::gather()
, чтобы поместить имена столбцов Num_*
в переменную product
, а затем извлечь типы продуктов и номера продуктов в упорядоченные и неупорядоченные коэффициенты соответственно.
library(tidyr)
library(dplyr)
library(stringr)
df_out <- df %>%
gather("product", "product_value", -c(Condition:Trial, Health)) %>%
mutate(product_num = factor(str_match(product, "\\d")),
product = ordered(str_remove_all(product, "Num_|\\d"),
levels = c("Fries", "Fish")
)
)
В итоге вы должны получить фрейм данных, подобный приведенному ниже, который можно использовать для гибкого сравнения «Рыба» с «Фри» (порядковый номер) или «Рыба 1» с «Рыба 2» (в обоихпадежи просто «рыба» (по существу, номинальные) и т. д. Я преобразовал product_num
в фактор, а не в целочисленный вектор, чтобы избежать путаницы, которая может быть вызвана внутренним порядком целых чисел. В зависимости от вашей стратегии моделирования вам, возможно, все же потребуется поднастроить и / или перераспределить данные.
# A tibble: 16 x 7
Condition SubNum Trial Health product product_value product_num
<fct> <int> <int> <int> <ord> <int> <fct>
1 Treatment 1 1 3 Fish 1 1
2 Treatment 1 2 5 Fish 0 1
3 Control 2 1 4 Fish 0 1
4 Control 2 2 5 Fish 0 1
5 Treatment 1 1 3 Fish 1 2
6 Treatment 1 2 5 Fish 3 2
7 Control 2 1 4 Fish 0 2
8 Control 2 2 5 Fish 0 2
9 Treatment 1 1 3 Fries 2 1
10 Treatment 1 2 5 Fries 4 1
11 Control 2 1 4 Fries 0 1
12 Control 2 2 5 Fries 0 1
13 Treatment 1 1 3 Fries 1 2
14 Treatment 1 2 5 Fries 1 2
15 Control 2 1 4 Fries 0 2
16 Control 2 2 5 Fries 0 2