R语言 | 宽数据变成一列,保留对应的行名和列名

对应稀疏矩阵 转为 宽数据框,见

目的:比如查看鸢尾花整体的指标分布,4个指标分开,画到一个图中。每个品种画一个图。

1.数据整理:宽变长 手工版

复制代码
dat0=iris
dat=unlist(dat0[,1:4]) |> as.data.frame()
colnames(dat)="val"
dim(dat) #600 1

dat$obs= rep( rownames(dat0), times=ncol(dat0[,1:4]) )
dat$variation= rep( colnames(dat0[,1:4]), each=nrow(dat0[,1:4]) )
dat$Species= rep( dat0$Species, times=ncol(dat0[,1:4]) )
dim(dat) # 600   4
head(dat)
#                        val obs    variation Species
#Sepal.Length1 5.1   1 Sepal.Length  setosa
#Sepal.Length2 4.9   2 Sepal.Length  setosa

2.画图

复制代码
colorset.types=ggsci::pal_npg()(5)[c(1,2,4,5)]
scales::show_col(colorset.types)
library(ggplot2)
ggplot(dat, aes(val, fill=variation))+
  geom_density(linewidth=1, alpha=0.5)+
  facet_grid(Species~., scale="free_y")+
  theme_bw(base_size = 14)+
  scale_fill_manual("Species", values = colorset.types, #breaks = my.breaks, labels=my.labels
                    )+
  #scale_x_discrete(breaks = my.breaks, labels = my.labels) +
  labs(x="Length")

3. 原理

原理1:rep() 重复的方式,整体重复times=,每个元素分别重复 each=

复制代码
rep(c("a", "b"), times=2) #"a" "b" "a" "b"
rep(c("a", "b"), each=2) #"a" "a" "b" "b"

原理2: 对数据框做 unlist() 默认是按列展开。

数学中矩阵是列向量。

复制代码
> head(iris[1:2, 1:4])
  Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2
> unlist(iris[1:2, 1:4])
Sepal.Length1 Sepal.Length2  Sepal.Width1  Sepal.Width2 Petal.Length1 Petal.Length2  Petal.Width1  Petal.Width2 
          5.1           4.9           3.5           3.0           1.4           1.4           0.2           0.2 

End.

相关推荐
oort1236 分钟前
VLStream 全开源决策式 AI 视频平台 技术视角完整说明
大数据·开发语言·人工智能·经验分享·python·开源·音视频
Cloud_Shy6187 分钟前
解读《Effective Python 3rd Edition》:从练气到老魔(第二章 Item 10 - 12)
c语言·开发语言·网络·人工智能·windows·python·编辑器
Xeon_CC8 分钟前
vs2026远程开发debian12容器的C++程序笔记
开发语言·c++·笔记
水无痕simon11 分钟前
9 C语言的基础练习
c语言·开发语言·算法
少司府13 分钟前
C++进阶:二叉搜索树
开发语言·数据结构·c++·二叉树·stl·二叉搜索树·tree
Rust研习社16 分钟前
从 LaunchBadge 到 transact-rs:SQLx 社区迈出可持续治理的第一步
开发语言·后端·rust
程序大视界25 分钟前
【C++ 从基础到项目实战】C++(九):友元与设计模式初探——打破封装的艺术
开发语言·c++·cpp
hhb_61828 分钟前
Bash变量不加引号:空格文件名致命陷阱
开发语言·chrome·bash
宸津-代码粉碎机28 分钟前
Spring AI企业级RAG进阶|文档智能分片调优、ES深度整合、接口限流熔断监控生产实战
java·开发语言·人工智能·后端·spring·elasticsearch·oracle
两年半的个人练习生^_^31 分钟前
JVM进阶系列:彻底理解 Java 内存模型(JMM)
java·开发语言