专栏首页生信补给站数据处理 | R-tidyr包

数据处理 | R-tidyr包

介绍tidyr包中五个基本函数的简单用法:长转宽,宽转长,合并,分割,NA简单填充。

长数据就是一个观测对象可由多行组成,而宽数据则是一个观测仅由一行组成。

#载入所需的R包

library(dplyr)

library(tidyr)

#测试数据集

widedata <- data.frame(person=c('A','B','C'),grade=c(5,6,4),score=c(89,98,90))

widedata

person grade score

1 A 5 89

2 B 6 98

3 C 4 90

一 宽数据转为长数据

gather(): 类似于reshape2包中的melt()函数;

gather(data, key, value, … , na.rm = FALSE, convert = FALSE):

data:需要被转换的宽形表

key:将原数据框中的所有列赋给一个新变量key

value:将原数据框中的所有值赋给一个新变量value

...:可以指定哪些列聚到一列中

na.rm:是否删除缺失值

将示例数据集转成长数据:

longdata <- gather(widedata, variable, value)

longdata

variable value

1 person A

2 person B

3 person C

4 grade 5

5 grade 6

6 grade 4

7 score 89

8 score 98

9 score 90

只把制定变量从宽数据变成长数据的功能,person不变成长数据

gather(widedata, variable, value, -person)

person variable value

1 A grade 5

2 B grade 6

3 C grade 4

4 A score 89

5 B score 98

6 C score 90

gather()函数比reshape2包中melt()函数的优势: 它可以只gather若干列而其他列保持不变:

age <- c(20, 21, 22)

wide <- data.frame(widedata, age)

wide

person grade score age

1 A 5 89 20

2 B 6 98 21

3 C 4 90 22

先对widedata增加一列 age. 整合两个变量之间的若干列, 而保持其他列不变:

long <- gather(wide, variable, value, grade:age)

long

person variable value

1 A grade 5

2 B grade 6

3 C grade 4

4 A score 89

5 B score 98

6 C score 90

7 A age 20

8 B age 21

9 C age 22

二 长数据转为宽数据

spread():类似于reshape2包中的cast()函数;

spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)

data:为需要转换的长形表

key:需要将变量值拓展为字段的变量

value:需要分散的值

fill:对于缺失值,可将fill的值赋值给被转型后的缺失值

将长数据转成宽数据:

wide <- spread(long, variable, value)

wide

person age grade score

1 A 20 5 89

2 B 21 6 98

3 C 22 4 90

这实际将原来gather后的结果还原为gather前, 但各列的相互位置稍有调整.

三 多列合并为一列

unite(data, col, … , sep = " ")

data::表示数据框,

col:表示合并后的列名称,

… :表示需要合并的若干变量,

sep: = " "用于指定分隔符,

remove:是否删除被组合的列

把widedata中的person,grade, score三个变量合成一个变量information, 并变成"person-grade-score"的格式

wideunite<-unite(widedata, information, person, grade, score, sep= "-")

wideunite

information

1 A-5-89

2 B-6-98

3 C-4-90

四 一列分离为多列.

separate(data, col, into, sep = " ")

data:为数据框

col:需要被拆分的列

into:要拆分为的(多个)列, 通常用c()的形式进行命名

sep : = " " 用于指定分隔符

remove:是否删除被分割的列

用separate函数将上面的wideunite数据框还原:

widesep <- separate(wideunite, information,c("person","grade","score"), sep = "-")

widesep

person grade score

1 A 5 89

2 B 6 98

3 C 4 90

可见separate()函数和unite()函数的功能是相反的.

五 缺失值填充

示例数据集,增加NA值

NAdata <- data.frame(person=c('A','B','C','D'),grade=c(5,NA,4,7),score=c(89,98,NA,89))

NAdata

person grade score

1 A 5 89

2 B NA 98

3 C 4 NA

4 D 7 89

计算x的均值和中位数

x_mean <- mean(NAdata$grade, na.rm = TRUE)

x_median <- median(NAdata$grade, na.rm = TRUE)

计算y的众数

y_mode <- as.character(NAdata

用特定值进行NA填充:

NAdata2 <- replace_na(data = NAdata, replace = list(grade = x_mean, score = y_mode))

NAdata2

person grade score

1 A 5.000000 89

2 B 5.333333 98

3 C 4.000000 89

4 D 7.000000 89

其他数据的预处理方法及缺失值的处理方法,待续 。。。

本文分享自微信公众号 - 生信补给站(Bioinfo_R_Python)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Tidyverse| XX_join :多个数据表(文件)之间的各种连接

    前面分享了单个文件中的select列,filter行,列拆分等,实际中经常是多个数据表,综合使用才能回答你所感兴趣的问题。

    西游东行
  • Perl_控制结构(2)

    while($i){print “$i “;$i--;};         #输出:4 3 2 1

    西游东行
  • 绘图系列|R-corrplot相关图

    初步接触数据集,探索性分析后,经常需要做一个相关分析,得到各变量间的相关系数以及显著性水平。

    西游东行
  • 模拟Spring事务注解

    原子性指的是整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节, 保证程序的原子性在程序设计中是不容忽视一环

    每天学Java
  • 这或许是对小白最友好的python入门了吧——16,输入文本

    大部分时候我们需要的数值元素等都不是给定的,而是需要用户输入的,我们应该怎么做呢? 这个是时候我们就要用input这个函数: score = input("输入...

    用户1315847
  • JavaScript HTTP客户端库axios介绍

    HTTP客户端是很多时候我们都需要用到的功能,今天就来介绍一个比较流行的JavaScript编写的HTTP客户端库axios。 安装 如果你会使用npm的话,可...

    乐百川
  • [028]子线程能否操作UI控件

    这是一个初级Android工程师面试问题,一般标准答案:子线程不能操作UI控件。 那我为什么还要问这个弱智的问题呢?

    王小二
  • 基于声音的鸟类物种检测

    拥有Python经验的女性数据科学家,博士候选人,鸟类学家,数据分析师和软件工程师共同参与了一系列为期两周的冲刺,共同致力于该项目。

    代码医生工作室
  • 【JS】257- 图解 Map、Reduce 和 Filter 数组方法

    map、reduce 和 filter 是三个非常实用的 JavaScript 数组方法,赋予了开发者四两拨千斤的能力。我们直接进入正题,看看如何使用(并记住)...

    pingan8787
  • 图解 Map、Reduce 和 Filter 数组方法

    map、reduce 和 filter 是三个非常实用的 JavaScript 数组方法,赋予了开发者四两拨千斤的能力。我们直接进入正题,看看如何使用(并记住)...

    grain先森

扫码关注云+社区

领取腾讯云代金券