当前位置: 首页 > news >正文

R 语言学习教程,从入门到精通,R 数据重塑(15)

1、R 数据重塑

合并数据框
R 语言合并数据框使用 merge() 函数。
merge() 函数语法格式如下:

# S3 方法
merge(x, y,)
# data.frame 的 S3 方法 
merge(x, y, by = intersect(names(x), names(y)),by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,incomparables = NULL,)

常用参数说明:
x, y: 数据框
by, by.x, by.y:指定两个数据框中匹配列名称,默认情况下使用两个数据框中相同列名称。
all:逻辑值; all = L 是 all.x = L 和 all.y = L 的简写,L 可以是 TRUE 或 FALSE。
all.x:逻辑值,默认为 FALSE。如果为 TRUE, 显示 x 中匹配的行,即便 y 中没有对应匹配的行,y 中没有匹配的行用 NA 来表示。
all.y:逻辑值,默认为 FALSE。如果为 TRUE, 显示 y 中匹配的行,即便 x 中没有对应匹配的行,x 中没有匹配的行用 NA 来表示。
sort:逻辑值,是否对列进行排序。
merge() 函数和 SQL 的 JOIN 功能很相似:
在这里插入图片描述
Natural join 或 INNER JOIN:如果表中有至少一个匹配,则返回行
Left outer join 或 LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
Right outer join 或 RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
Full outer join 或 FULL JOIN:只要其中一个表中存在匹配,则返回行

# data frame 1
df1 = data.frame(SiteId = c(1:6), Site = c("Google","Nhooo","Taobao","Facebook","Zhihu","Weibo"))# data frame 2
df2 = data.frame(SiteId = c(2, 4, 6, 7, 8), Country = c("CN","USA","CN","USA","IN")) # INNER JOIN 
df1 = merge(x=df1,y=df2,by="SiteId")
print("----- INNER JOIN -----")
print(df1)# FULL JOIN
df2 = merge(x=df1,y=df2,by="SiteId",all=TRUE)
print("----- FULL JOIN -----")
print(df2)# LEFT JOIN
df3 = merge(x=df1,y=df2,by="SiteId",all.x=TRUE)
print("----- LEFT JOIN -----")
print(df3)# RIGHT JOIN
df4 = merge(x=df1,y=df2,by="SiteId",all.y=TRUE)
print("----- RIGHT JOIN -----")
print(df4)

执行以上代码输出结果为:

[1] "----- INNER JOIN -----"SiteId     Site Country
1      2   Nhooo      CN
2      4 Facebook     USA
3      6    Weibo      CN
[1] "----- FULL JOIN -----"SiteId     Site Country.x Country.y
1      2   Nhooo        CN        CN
2      4 Facebook       USA       USA
3      6    Weibo        CN        CN
4      7     <NA>      <NA>       USA
5      8     <NA>      <NA>        IN
[1] "----- LEFT JOIN -----"SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Nhooo      CN   Nhooo        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
[1] "----- RIGHT JOIN -----"SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Nhooo      CN   Nhooo        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
4      7     <NA>    <NA>     <NA>      <NA>       USA
5      8     <NA>    <NA>     <NA>      <NA>        IN

1.1、数据整合和拆分

R 语言使用 melt() 和 cast() 函数来对数据进行整合和拆分。
melt() :宽格式数据转化成长格式。
cast() :长格式数据转化成宽格式。
下图很好展示来 melt() 和 cast() 函数的功能(后面示例会详细说明):
在这里插入图片描述
melt() 将数据集的每个列堆叠到一个列中,函数语法格式:

melt(data, ..., na.rm = FALSE, value.name = "value")

参数说明:
data:数据集。
…:传递给其他方法或来自其他方法的其他参数。
na.rm:是否删除数据集中的 NA 值。
value.name 变量名称,用于存储值。
进行以下操作之前,我们先安装依赖包:

# 安装库,MASS 包含很多统计相关的函数,工具和数据集
install.packages("MASS", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
#  melt() 和 cast() 函数需要对库 
install.packages("reshape2", repos = "https://mirrors.ustc.edu.cn/CRAN/") 
install.packages("reshape", repos = "https://mirrors.ustc.edu.cn/CRAN/")

测试示例:

# 载入库
library(MASS) 
library(reshape2) 
library(reshape) # 创建数据框
id<- c(1, 1, 2, 2) 
time <- c(1, 2, 1, 2) 
x1 <- c(5, 3, 6, 2) 
x2 <- c(6, 5, 1, 4) 
mydata <- data.frame(id, time, x1, x2) # 原始数据框
cat("原始数据框:\n") 
print(mydata) 
# 整合
md <- melt(mydata, id = c("id","time")) cat("\n整合后:\n") 
print(md)

执行以上代码输出结果为:

原始数据框:
id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4
整合后:
id time variable value
1  1    1       x1     5
2  1    2       x1     3
3  2    1       x1     6
4  2    2       x1     2
5  1    1       x2     6
6  1    2       x2     5
7  2    1       x2     1
8  2    2       x2     4

cast 函数用于对合并对数据框进行还原,dcast() 返回数据框,acast() 返回一个向量/矩阵/数组。
cast() 函数语法格式:

dcast(data,formula,fun.aggregate = NULL,...,margins = NULL,subset = NULL,fill = NULL,drop = TRUE,value.var = guess_value(data)
)
acast(data,formula,fun.aggregate = NULL,...,margins = NULL,subset = NULL,fill = NULL,drop = TRUE,value.var = guess_value(data)
)

参数说明:
data:合并的数据框。
formula:重塑的数据的格式,类似 x ~ y 格式,x 为行标签,y 为列标签 。
fun.aggregate:聚合函数,用于对 value 值进行处理。
margins:变量名称的向量(可以包含"grand_col" 和 “grand_row”),用于计算边距,设置 TURE 计算所有边距。
subset:对结果进行条件筛选,格式类似 subset = .(variable==“length”)。
drop:是否保留默认值。
value.var:后面跟要处理的字段。

# 载入库
library(MASS) 
library(reshape2) 
library(reshape) # 创建数据框
id<- c(1, 1, 2, 2) 
time <- c(1, 2, 1, 2) 
x1 <- c(5, 3, 6, 2) 
x2 <- c(6, 5, 1, 4) 
mydata <- data.frame(id, time, x1, x2) 
# 整合
md <- melt(mydata, id = c("id","time")) 
# Print recasted dataset using cast() function 
cast.data <- cast(md, id~variable, mean) print(cast.data) cat("\n") 
time.cast <- cast(md, time~variable, mean) 
print(time.cast) cat("\n") 
id.time <- cast(md, id~time, mean) 
print(id.time) cat("\n") 
id.time.cast <- cast(md, id+time~variable) 
print(id.time.cast) cat("\n") 
id.variable.time <- cast(md, id+variable~time) 
print(id.variable.time) cat("\n") 
id.variable.time2 <- cast(md, id~variable+time) 
print(id.variable.time2)

执行以上代码输出结果为:

id x1  x2
1  1  4 5.5
2  2  4 2.5time  x1  x2
1    1 5.5 3.5
2    2 2.5 4.5id   1 2
1  1 5.5 4
2  2 3.5 3id time x1 x2
1  1    1  5  6
2  1    2  3  5
3  2    1  6  1
4  2    2  2  4id variable 1 2
1  1       x1 5 3
2  1       x2 6 5
3  2       x1 6 2
4  2       x2 1 4id x1_1 x1_2 x2_1 x2_2
1  1    5    3    6    5
2  2    6    2    1    4

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 设计模式在芯片验证中的应用——状态
  • VS Code开发C#(.NET)之快速入门
  • 大数据技术——实战项目:广告数仓(第八部分)FineBI实战
  • C语言 ——— 学习并使用malloc和free函数
  • OSI七层网络模型 /TCP/IP五层模型以及封装分用的详细讲解
  • 最近网友问晚上失眠的问题
  • 【vue3|第22期】Vite + Vue3:vite配置文件
  • 重磅!2023中国高校计算机大赛-人工智能创意赛结果出炉
  • 声明式事务及编程式事务
  • 数据在内存中的存储(了解大小端字节序浮点数在内存中存储)详细~
  • zabbix实战-磁盘空间告警
  • 华为鸿蒙Core Vision Kit 骨骼检测技术
  • 构建第一个Spring项目
  • 黑神话悟空什么配置可以玩?什么样的游戏本配置可以畅玩《黑神话:悟空》?黑神话悟空电脑配置推荐
  • WEB之文件上传
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • node和express搭建代理服务器(源码)
  • Python socket服务器端、客户端传送信息
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • springboot_database项目介绍
  • Spring框架之我见(三)——IOC、AOP
  • SpriteKit 技巧之添加背景图片
  • 笨办法学C 练习34:动态数组
  • 二维平面内的碰撞检测【一】
  • 汉诺塔算法
  • 技术发展面试
  • 两列自适应布局方案整理
  • 王永庆:技术创新改变教育未来
  • 我感觉这是史上最牛的防sql注入方法类
  • 译自由幺半群
  • 因为阿里,他们成了“杭漂”
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • linux 淘宝开源监控工具tsar
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 达梦数据库知识点
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #vue3 实现前端下载excel文件模板功能
  • (1)Android开发优化---------UI优化
  • (152)时序收敛--->(02)时序收敛二
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (二)windows配置JDK环境
  • (面试必看!)锁策略
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (转)四层和七层负载均衡的区别
  • *** 2003
  • ... 是什么 ?... 有什么用处?
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .Net 6.0 处理跨域的方式
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net dataexcel winform控件 更新 日志