Создание нескольких графиков взаимодействия одновременно из аккуратных данных в R - PullRequest
0 голосов
/ 06 июля 2018

У меня аккуратный кадр данных, который выглядит следующим образом:

id  samediff  gainloss  factor  value
1   S         G         happy   5
1   S         G         sad     3
1   S         G         angry   4
2   D         G         happy   2
2   D         G         sad     3
2   D         G         angry   5
3   D         L         happy   1
3   D         L         sad     4
3   D         L         angry   3

Вот воспроизводимые данные:

df<- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
samediff = c("S", "S", "S", "D", "D", "D", "D", "D", "D"), 
gainloss = c("G", "G", "G", "G", "G", "G", "L", "L", "L"), 
factor = c("happy", "sad", "angry", "happy", "sad", "angry", "happy", "sad", "angry"), 
value = c(5, 3, 4, 2, 3, 5, 1, 4, 3))

Я бы хотел создать серию интерактивных сюжетов. До сих пор я создавал графики взаимодействия, распределяя данные следующим образом:

id  samediff  gainloss  happy  sad  angry 
1   S         G         5      3    4
2   D         G         2      3    5
3   D         L         1      4    3

Затем я использую следующую функцию:

interaction.plot(df$samediff, df$gainloss, df$happy) 

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

Используя приведенный здесь пример, мне также потребуются графики, на которых последний член функции взаимодействия.plot имеет вид df $ sad и df $ angry. Первые два слагаемых в функции взаимодействия.плот могут остаться прежними.

1 Ответ

0 голосов
/ 06 июля 2018

Не очень элегантно, но, надеюсь, понятно, что происходит и как его можно настроить, если в ваш запрос будут внесены другие изменения.

df <- data.frame(id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), 
                 samediff = c("S", "S", "S", "D", "D", "D", "D", "D", "D"), 
                 gainloss = c("G", "G", "G", "G", "G", "G", "L", "L", "L"), 
                 factor = c("happy", "sad", "angry", "happy", "sad", "angry", "happy", "sad", "angry"), 
                 value = c(5, 3, 4, 2, 3, 5, 1, 4, 3))
df_2 <- tidyr::spread(df, factor, value)

# Unique values of factor to iterate over and obtain interaction plots for
factor_values <- unique(df$factor)
size <- ceiling(sqrt(length(factor_values)))

par(mfrow = c(size, size))
for(i_factor_value in factor_values) {
  interaction.plot(df_2$samediff, df_2$gainloss, df_2[[i_factor_value]], ylab = i_factor_value)
}
par(mfrow = c(1, 1))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...