我有以下数据:
df1<-read.table(text="Class1 Class2 Class3 M1 M2 M3 Z1 Z2 Z3
C E D Apple Apple Apple Orange Orange Orange
A B B Orange Orange Orange Orange Orange Orange
A C A Orange Orange Orange Apple Orange Apple
B A D Orange Apple Apple Apple Orange Apple
C B B Orange Orange Apple Apple Apple Apple
A D C Orange Orange Apple Orange Apple Orange
E C B Apple Orange Apple Apple Orange Apple
D A B Apple Orange Apple Apple Orange Orange
E D E Orange Orange Orange Apple Apple Apple
C C A Apple Orange Apple Apple Apple Apple
E C A Orange Apple Orange Orange Orange Orange
C B D Apple Apple Apple Orange Apple Apple
E E D Apple Orange Apple Orange Apple Orange
E A B Orange Apple Apple Orange Orange Apple
A D E Apple Orange Apple Orange Orange Apple
E B D Apple Apple Orange Apple Apple Apple
D C B Orange Orange Apple Apple Orange Orange
A C C Apple Apple Apple Apple Orange Orange
E B A Apple Orange Apple Orange Apple Apple
E C A Orange Apple Apple Apple Apple Apple
",header=TRUE)
我想使用循环来识别频率表。例如,M1和Z1的类为1,M2和Z2的类为2,M3和Z3的类为3,依此类推。每个表的原型表是:
Class M1-Apple M1_Orange Z1_Apple Z1_Orange
A x x x x
B x x x x
C x x x x
D x x x x
E x x x x
接下来,我想为每个表格生成条形图。
我已经尝试过:
class<-df1[1:3]
MZ<-df1[4:9]
df2<-lapply(1:3, function(x) table(class[,x] ~ MZ[,x]))
所以我需要图表。我认为我们需要先映射变量,然后使用lappy运行这些图。有没有人帮忙?
[如果我正确理解了您想要的东西,那么这很大程度上是重塑数据from wide to long format的练习,因此我们首先使用pivot_longer
中的tidyr 1.0.0
进行操作(您可能需要升级)。我进行了两次旋转,因为我发现它更容易思考,但是旋转可以一次完成:
library(tidyverse)
long_data <- df1 %>%
pivot_longer(everything(),
names_to = c(".value", "set"),
names_pattern = "([A-Za-z]+)(.)") %>%
pivot_longer(-c(set, Class),
names_to = "type",
values_to = "fruit") %>%
select(set, class = Class, type, fruit)
head(long_data)
#> # A tibble: 6 x 4
#> set class type fruit
#> <chr> <fct> <chr> <fct>
#> 1 1 C M Apple
#> 2 1 C Z Orange
#> 3 2 E M Apple
#> 4 2 E Z Orange
#> 5 3 D M Apple
#> 6 3 D Z Orange
[set
此处的变量对应于您之前在各列中使用的整数后缀。现在我们总结一下这些数据:
counts <- long_data %>% group_by_all %>% count
head(counts)
#> # A tibble: 6 x 5
#> # Groups: set, class, type, fruit [6]
#> set class type fruit n
#> <chr> <fct> <chr> <fct> <int>
#> 1 1 A M Apple 2
#> 2 1 A M Orange 3
#> 3 1 A Z Apple 2
#> 4 1 A Z Orange 3
#> 5 1 B M Orange 1
#> 6 1 B Z Apple 1
如果需要,您可以将其重塑为更宽的格式,以使其成为矩阵形状,但是我将其放在此处,因为我收集到您对绘图部分感兴趣,为此我们需要长格式无论如何。
因此,最后是情节。您所追求的图并不完全清楚,但是根据数据来看,以下对我来说最有意义:
ggplot(counts, aes(x = class, y = n, fill = fruit)) +
geom_histogram(position = "dodge",
stat = "identity") +
facet_wrap(~set)
#> Warning: Ignoring unknown parameters: binwidth, bins, pad
由reprex package(v0.3.0)在2019-12-01创建
如果需要其他内容,请尝试aes
和facet_wrap
变量。