从R中的整洁数据同时创建多个交互图
我有一个整洁的数据框架,如下所示:从R中的整洁数据同时创建多个交互图,r,plot,tidyr,tidyverse,interaction,R,Plot,Tidyr,Tidyverse,Interaction,我有一个整洁的数据框架,如下所示: 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
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))
然后,我使用以下函数:
interaction.plot(df$samediff, df$gainloss, df$happy)
有没有办法同时为每个因素创建单独的交互图?在我的实际数据集中,我有比这里列出的3个因素(高兴、悲伤、愤怒)多得多的因素,因此了解是否有一种方法可以有效地生成这些因素对我来说是很有用的
使用这里的示例,我还需要interaction.plot函数中最后一个术语为df$sad和df$anger的绘图。interaction.plot函数中的前两项可以保持不变 不是很优雅,但如果您的请求有其他更改,希望可以清楚地知道发生了什么,以及如何调整
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))
df请通过在代码中创建数据集或使用dput()
df%%>%spread(factor,value)%%>{map2(list([2:3]),([,-(1:3)],~cbind(.x,.y)%%>%set_name(c(“x.factor”,“trace.factor”,“response”)%%>%invoke(interaction.plot,)}
?这两行似乎不起作用。行A:大小当我在c(大小,大小)(像c(5,5)这样的值)中手动输入值时,我可以显示所有的图形。正如您所说,您有许多不同的绘图,但没有指定数字,您所引用的代码是一种根据您有多少绘图自动确定和设置布局大小的方法(它假设您需要方形布局,并相应地确定长度和宽度)。是的,如果您发现一种工作更好的配置,您可以随时手动设置它。
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))