温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

tidyr包中的基本函数怎么用

发布时间:2022-01-05 20:42:13 来源:亿速云 阅读:130 作者:iii 栏目:大数据

这篇文章主要介绍“tidyr包中的基本函数怎么用”,在日常操作中,相信很多人在tidyr包中的基本函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”tidyr包中的基本函数怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

#载入所需的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$score[which.max(table(NAdata$score))])

用特定值进行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

到此,关于“tidyr包中的基本函数怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI