这篇文章主要介绍“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包中的基本函数怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。