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

数据处理是我们作为生信研究人员最重要也是最麻烦的一步,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.4

data_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 3

y

## 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 7

nor_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.00

stand_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

除此之外,Winsorize,Center,Ranktransform,Rotate 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)