数据处理的命令太复杂了?来看看数据巫师datawizard






数据处理的命令太复杂了?来看看数据巫师datawizard

小花  生信果  2023-09-10 19:00:04

点击蓝字 关注我们

数据处理是我们作为生信研究人员最重要也是最麻烦的一步,R包千罗万象,要求的格式也是五花八门的,有经验的小伙伴应该可以明白,在我们跑数据的过程中,最头疼的不是后续代码的运行,是第一步!数据的处理,而今天小果想给大家介绍的这个R包就是一个轻量化的数据处理包,函数的命令具有明显的逻辑性,清晰易懂。它就是数据巫师–datawizardR包!


datawizardR包是一个十分神奇的R包,它可以帮助你轻松地完成数据分析的各个步骤,比如整理数据、预处理数据、转换数据、计算数据的统计量等等。它就像一个数据魔法师,可以用简单的函数来操纵数据,让你的数据分析变得更加快速和高效。

接下来,就让小果带着大家一起了解这个R包吧!

# Step 0 安装并载入

options(timeout = 999)options(stringsAsFactors = F)
if(!require(datawizard))devtools::install_github("easystats/datawizard")library(datawizard)library(tidyverse)

数据清洗

colnames(mtcars)##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"## [11] "carb"# 直接筛选某列数据data_match(mtcars, data.frame(vs = 0, am = 1))##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb## Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4## Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2## Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4## Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6## Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8# 限定条件进行筛选data_filter(mtcars, mpg < 20 & mpg > 15)##                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb## Hornet Sportabout 18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2## Valiant           18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1## Merc 280          19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4## Merc 280C         17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4## Merc 450SE        16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3## Merc 450SL        17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3# 可以通过find_columns() 或 get_columns() 来查找数据框中的列,或检索所选列的数据find_columns(mtcars, ends_with("p"))## [1] "disp" "hp"get_columns(mtcars, ends_with("p")) %>% head() # 或者是starts_with()##                   disp  hp## Mazda RX4          160 110## Mazda RX4 Wag      160 110## Datsun 710         108  93## Hornet 4 Drive     258 110## Hornet Sportabout  360 175## Valiant            225 105# 提取变量data_extract(mtcars, "mpg")##  [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4## [16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7## [31] 15.0 21.4data_extract(mtcars, ends_with("p")) %>% head()##                   disp  hp## Mazda RX4          160 110## Mazda RX4 Wag      160 110## Datsun 710         108  93## Hornet 4 Drive     258 110## Hornet Sportabout  360 175## Valiant            225 105# 删除变量data_remove(mtcars, "disp") %>% head()##                    mpg cyl  hp drat    wt  qsec vs am gear carb## Mazda RX4         21.0   6 110 3.90 2.620 16.46  0  1    4    4## Mazda RX4 Wag     21.0   6 110 3.90 2.875 17.02  0  1    4    4## Datsun 710        22.8   4  93 3.85 2.320 18.61  1  1    4    1## Hornet 4 Drive    21.4   6 110 3.08 3.215 19.44  1  0    3    1## Hornet Sportabout 18.7   8 175 3.15 3.440 17.02  0  0    3    2## Valiant           18.1   6 105 2.76 3.460 20.22  1  0    3    1# 变量重命名data_rename(mtcars, select = "rename", before = "disp") %>% head()##                      1 2   3   4    5     6     7 8 9 10 11## Mazda RX4         21.0 6 160 110 3.90 2.620 16.46 0 1  4  4## Mazda RX4 Wag     21.0 6 160 110 3.90 2.875 17.02 0 1  4  4## Datsun 710        22.8 4 108  93 3.85 2.320 18.61 1 1  4  1## Hornet 4 Drive    21.4 6 258 110 3.08 3.215 19.44 1 0  3  1## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0  3  2## Valiant           18.1 6 225 105 2.76 3.460 20.22 1 0  3  1# 合并数据框## 创建两个示例数据框x <- data.frame(a = 1:3, b = c("a", "b", "c"), c = 5:7, id = 1:3)y <- data.frame(c = 6:8, d = c("f", "g", "h"), e = 100:102, id = 2:4)x##   a b c id## 1 1 a 5  1## 2 2 b 6  2## 3 3 c 7  3y##   c d   e id## 1 6 f 100  2## 2 7 g 101  3## 3 8 h 102  4## 这里是一些数据框合并的连接方式哦,熟悉SQL的小伙伴应该就不会觉得陌生啦,这里小果就啰嗦一点,每个都解释一下哦~# 全外连接,保留所有行,无论在哪个数据集中是否有匹配。data_merge(x, y, join = "full")##    a    b c id    d   e## 3  1    a 5  1 <NA>  NA## 1  2    b 6  2    f 100## 2  3    c 7  3    g 101## 4 NA <NA> 8  4    h 102# 左连接,保留左边数据集中的所有行,并将右边数据集中的匹配行合并。data_merge(x, y, join = "left")##   a b c id    d   e## 3 1 a 5  1 <NA>  NA## 1 2 b 6  2    f 100## 2 3 c 7  3    g 101# 右连接,保留右边数据集中的所有行,并将左边数据集中的匹配行合并。data_merge(x, y, join = "right")##    a    b c id d   e## 1  2    b 6  2 f 100## 2  3    c 7  3 g 101## 3 NA <NA> 8  4 h 102# 内连接,只保留在两个数据集中都有匹配的行。data_merge(x, y, join = "inner")##   a b c id d   e## 1 2 b 6  2 f 100## 2 3 c 7  3 g 101# 将所有数据保存,上下合并。data_merge(x, y, join = "bind")##    a    b c id    d   e## 1  1    a 5  1 <NA>  NA## 2  2    b 6  2 <NA>  NA## 3  3    c 7  3 <NA>  NA## 4 NA <NA> 6  2    f 100## 5 NA <NA> 7  3    g 101## 6 NA <NA> 8  4    h 102# 简单来说,将x数据框中与y数据框c列有共同元素的行提取出来data_merge(x, y, join = "semi", by = "c")##   a b c id## 2 2 b 6  2## 3 3 c 7  3# 反之,这个是将x数据框中与y数据框c列没有共同元素的行提取出来data_merge(x, y, join = "anti", by = "c")##   a b c id## 1 1 a 5  1

数据重塑

长宽数据的转换


wide_data <- data.frame(replicate(5, rnorm(10)))
head(data_to_long(wide_data))## name value## 1 X1 0.42465528## 2 X2 0.13473229## 3 X3 2.26852458## 4 X4 1.06321951## 5 X5 -0.04557565## 6 X1 -0.01311497


数据类型的转换

在生信的研究中,我们会使用不同的统计学方法,有时不同的方法对数据的分布有不同的要求,datawizard包提供了数据转换的函数以达到一键转换的效果。以下是小果列举的两个例子。

df <- data.frame(a = c(-2,-1,0,1,2),b = c(3,4,5,6,7))df##    a b## 1 -2 3## 2 -1 4## 3  0 5## 4  1 6## 5  2 7nor_df <- normalize(df)nor_df##      a    b## 1 0.00 0.00## 2 0.25 0.25## 3 0.50 0.50## 4 0.75 0.75## 5 1.00 1.00stand_df <- standardize(df)stand_df##            a          b## 1 -1.2649111 -1.2649111## 2 -0.6324555 -0.6324555## 3  0.0000000  0.0000000## 4  0.6324555  0.6324555## 5  1.2649111  1.2649111

除此之外,WinsorizeCenterRanktransformRotate or transpose等处理方法,有兴趣的小伙伴可以自行研究一下哦!

数据属性

除了数据处理之外,datawizard包还有一个功能,那就是对数据进行统计,为数据框中的所有变量提供全面的描述性摘要的方法。


## Variable |   Mean |     SD |    IQR |           Range | Skewness | Kurtosis |  n | n_Missing## --------------------------------------------------------------------------------------------## mpg      |  20.09 |   6.03 |   7.53 |  [10.40, 33.90] |     0.67 |    -0.02 | 32 |         0## cyl      |   6.19 |   1.79 |   4.00 |    [4.00, 8.00] |    -0.19 |    -1.76 | 32 |         0## disp     | 230.72 | 123.94 | 221.53 | [71.10, 472.00] |     0.42 |    -1.07 | 32 |         0## hp       | 146.69 |  68.56 |  84.50 | [52.00, 335.00] |     0.80 |     0.28 | 32 |         0## drat     |   3.60 |   0.53 |   0.84 |    [2.76, 4.93] |     0.29 |    -0.45 | 32 |         0## wt       |   3.22 |   0.98 |   1.19 |    [1.51, 5.42] |     0.47 |     0.42 | 32 |         0## qsec     |  17.85 |   1.79 |   2.02 |  [14.50, 22.90] |     0.41 |     0.86 | 32 |         0## vs       |   0.44 |   0.50 |   1.00 |    [0.00, 1.00] |     0.26 |    -2.06 | 32 |         0## am       |   0.41 |   0.50 |   1.00 |    [0.00, 1.00] |     0.40 |    -1.97 | 32 |         0## gear     |   3.69 |   0.74 |   1.00 |    [3.00, 5.00] |     0.58 |    -0.90 | 32 |         0## carb     |   2.81 |   1.62 |   2.00 |    [1.00, 8.00] |     1.16 |     2.02 | 32 |         0

包括了均值、离散度、范围、偏度、峰度等度量。




那么今天小果的分享就到这里啦!希望今天小果的分享帮助到各位小伙伴在数据处理方向更进一步!

 

如果小伙伴有其他数据分析需求,可以尝试使用本公司新开发的生信分析小工具云平台,零代码完成分析,非常方便噢


云平台网址为:(http://www.biocloudservice.com/home.html)



(点击阅读原文跳转)

 点一下阅读原文了解更多资讯