R语言教程:数据重塑

2023年 7月 12日 32.6k 0

合并数据框

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 功能很相似:

R语言教程:数据重塑

  • 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","Runoob","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   Runoob      CN
2      4 Facebook     USA
3      6    Weibo      CN
[1] "----- FULL JOIN -----"
  SiteId     Site Country.x Country.y
1      2   Runoob        CN        CN
2      4 Facebook       USA       USA
3      6    Weibo        CN        CN
4      7                  USA
5      8                   IN
[1] "----- LEFT JOIN -----"
  SiteId   Site.x Country   Site.y Country.x Country.y
1      2   Runoob      CN   Runoob        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   Runoob      CN   Runoob        CN        CN
2      4 Facebook     USA Facebook       USA       USA
3      6    Weibo      CN    Weibo        CN        CN
4      7                           USA
5      8                            IN

数据整合和拆分

R 语言使用 melt() 和 cast() 函数来对数据进行整合和拆分。

  • melt() :宽格式数据转化成长格式。
  • cast() :长格式数据转化成宽格式。

下图很好展示来 melt() 和 cast() 函数的功能(后面实例会详细说明):

R语言教程:数据重塑

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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论