超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

今天在浏览R包网站时发现一个不错的包——diffdf包。

这个包是做什么用的了?

看R包介绍,这个包可以详细比较两个数据集之间的数据差异,包括变量、行以及各项数据值,然后输出数据差异的具体信息

看到这里,可以知道这个包实用性还是可以的。

下面来学习下这个包怎么用?

1. 安装和加载R包

安装可以从CRAN上安装,不复杂。

install.packages("diffdf")
library(diffdf)

2. 构建演示数据集

我们先构建一个演示数据集。

test_data <- tibble::tibble( 
  ID          = 1:10,
  GROUP1      = rep(c(1,2), each = 5),
  GROUP2      = rep(c(1:5), 2),
  INTEGER     = rpois(1040),
  BINARY      = sample(c("M""F"), 10, replace = T),
  DATE        = lubridate::ymd("2000-01-01") + rnorm(1007000),
  DATETIME    = lubridate::ymd_hms("2000-01-01 00:00:00") + rnorm(100200000000), 
  CONTINUOUS  = rnorm(1030 , 12),
  CATEGORICAL = factor(sample(c("A""B""C"), 10, replace = T)),
  LOGICAL     = sample(c(TRUEFALSE), 10, replace = T),
  CHARACTER   = stringi::stri_rand_strings(10, rpois(1013),  pattern = "[ A-Za-z0-9]")
)

test_data
超实用R包,一行代码输出两个数据集间的各项差异

如上图所示,我们构建了一个数据集,这个数据集有10行,11个变量,包括各种类型的数据。

3. diffdf包怎么用?

下面我们先构建一个演示数据集,来跟第一个数据集test_data进行比较。

直接将test_data传递给一个参数,构建第二个数据集,这时候这两个数据集中的数据是一样的。

test_data2 <- test_data 

我们可以比较test_data2和test_data数据集的差异。

在diffdf包中比较两个数据集的差异使用diffdf()函数,将需要比较的两个数据集放在函数中即可。

diffdf(test_data2, test_data)
# No issues were found!

如上所示,没有发现任何问题,这说明这两个数据集各项数据都是一致的。

下面我们来构建一些有差异的数据集,来和test_data数据集进行比较。

3.1 列变量有差异

我们构建一个跟test_data数据集列变量存在差异的数据集。

比如说去掉test_data数据集中的第六列,也就是DATA列。

test_data2 <- test_data[,-6]

diffdf(test_data, test_data2)
超实用R包,一行代码输出两个数据集间的各项差异

如上图所示,在两个比较对象之间发现了差异,并且输出了差异的具体信息,显示DATA列有差异,

3.2 行观测有差异

我们再构建一个跟test_data数据集行观测存在差异的数据集。

比如说去掉test_data数据集中的第9、10行数据。

test_data2 <- test_data[1:8, ]

diffdf(test_data, test_data2)
超实用R包,一行代码输出两个数据集间的各项差异

如上图所示,显示两个数据集在9、10行出现差异,

3.3 数据值有差异

我们不改变行数和列数,改变数据集中的某一数据值试试。

比如说我们将第二行第一列的数值改为6,原来的数据为2。

test_data2 <- test_data
test_data2[2,1] <- 6

diffdf(test_data, test_data2)

# Differences found between the objects!
# A summary is given below.
# Not all Values Compared Equal
# All rows are shown in table below
#   =============================
#    Variable  No of Differences 
#   -----------------------------
#       ID             1         
#   -----------------------------
# All rows are shown in table below
#   ========================================
#    VARIABLE  ..ROWNUMBER..  BASE  COMPARE 
#   ----------------------------------------
#       ID           2         2       6    
#   ----------------------------------------

如上图所示,不是所有的数据都是一样的,ID变量存在差异;后面还输出了差异的具体信息,ID变量的第二行存在差异,一个数据集为2,一个数据集为6。

除了比较上述差异外,还可以比较数据类型的差异。

3.4 数据类型差异

比如说,test_data数据集的第二列GROUP1为数字型变量,现在转换为字符型之后在比较差异。

test_data2 <- test_data
test_data2[, 2] <- as.character(test_data2[, 2])

diffdf(test_data, test_data2)
超实用R包,一行代码输出两个数据集间的各项差异

如上图所示,可以看到结果输出GROUP1变量存在差异,一个是数字型,一个是字符型。

除了上述差异可以比较外,这个函数还可以比较因子水平、数据标签等是否存在差异,关于这个包的更多信息请查阅包帮助文件。

参考资料

  1. diffdf包帮助文件。

既往专辑

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

超实用R包,一行代码输出两个数据集间的各项差异

生物医学科研方法

生信代码:传染病传播模拟

2021-1-17 19:05:09

生物医学科研方法

科普与医务人员职称晋升挂钩!上海加强医疗机构健康教育与促进工作

2021-1-17 19:44:55