问题是cbind 会将所有内容都转换为字符变量。
cluster <- c("Joe", "Sam", "Bob")
var1 <- c(22.9, 0, 0)
var2 <- c(57.8, 0, -25.1)
var3 <- c(45.9, -25.5, 63.9)
data <- as.data.frame(
cbind (cluster, var1, var2, var3)
)
str(data)
#>'data.frame': 3 obs. of 4 variables:
#> $ cluster: chr "Joe" "Sam" "Bob"
#> $ var1 : chr "22.9" "0" "0"
#> $ var2 : chr "57.8" "0" "-25.1"
#> $ var3 : chr "45.9" "-25.5" "63.9"
查看全部转换为chr。
最好用cbind.data.framelike
library(tidyverse)
data <- cbind.data.frame(cluster, var1, var2, var3)
str(data)
#>'data.frame': 3 obs. of 4 variables:
#> $ cluster: chr "Joe" "Sam" "Bob"
#> $ var1 : num 22.9 0 0
#> $ var2 : num 57.8 0 -25.1
#> $ var3 : num 45.9 -25.5 63.9
现在看到cbind.data.frame 保留了数据类型,即字符作为字符 (chr) 和数字作为数字 (num)。现在进行绘图,您可以使用
data %>%
pivot_longer(cols = -cluster, values_to = 'mark') %>%
ggplot( aes(x=name , y=mark)) +
geom_bar(stat="identity", fill="#69b3a2", width=0.6) +
coord_flip() +
#theme_ipsum() +
theme(
panel.grid.minor.y = element_blank(),
panel.grid.major.y = element_blank()
) +
ylab("mark") +
xlab("") +
facet_wrap(~cluster)