R将整洁数据定义为:每个变量的数据存储在自身的列中,每个观测值的数据存储在其自身的行中。
【tidyr】主要功能包括
- 数据变形(reshape data)
- 分割数据(split data)
- 处理缺失值(handle missing values)
数据变形
【gather】将宽数据转为长数据
#理解,两个坐标轴确定一个平面点的位置
tidyr::gather(data, key, value, ..., na.rm=FALSE)
- data tibble或data frame数据
- key 新数据中用于存放关键词的 字段名
- value 新数据中用于存放value的 字段名
- ... 新数据关键词来源
mydata <- tibble( country=c(‘A‘, ‘B‘, ‘C‘), ‘1999‘=c(‘0.7k‘, ‘37k‘, ‘212k‘), ‘2000‘=c(‘2k‘, ‘80k‘, ‘213k‘) ) gather(mydata, key="year", value="cases", ‘1999‘, ‘2000‘) mydata %>% gather(key="year", value="cases", ‘1999‘, ‘2000‘)
gather可以指定要gather的若干列
mtcarsNew <- mtcars %>% gather(`gear`,`carb`,key = "attribute", value = "value", -car) #不连续筛选 mtcarsNew <- mtcars %>% gather(mpg:drat,key = "attribute", value = "value", -car) #连续筛选,-car表示不选
【spread】将长数据转为宽数据,与gather互为逆反操作
tidyr::spread(data, key, value,fill=NA, convert=FALSE, drop=TRUE)
- data: 数据源
- key:将变量扩展为字段的变量
- value:需要分散的值
- fill:将fill的赋值给转型后的 缺失值
mydata<- tibble( country=rep(c(‘A‘, ‘B‘, ‘C‘), each=4), year=rep(c(1999,2000), each=2, time=3), type=rep(c(‘cases‘, ‘pop‘), time=6), count=c(‘0.7k‘, ‘19m‘, ‘2k‘, ‘20m‘, ‘37k‘, ‘172m‘, ‘80k‘, ‘174m‘, ‘212k‘, ‘1t‘, ‘213k‘, ‘1t‘) ) spread(mydata, key=type, value=count) mydata %>% spread(key=type, value=count)
分割数据与合并数据
【separate】将一列按照分隔符分隔为多列
tidyr::separate(data, col, into, sep)
- data 原始数据
- col 待分数据所在的列(字段、变量)
- into 分割后形成的数据对应的字段(变量)
- sep 分割数据时使用的风格符
table3 <- tibble( country=rep(c("A", "B", "C"), each=2), year=rep(c(1999, 2000), time=3), rate=c("0.7k/19m", "2k/20m", "37k/172m", "80k/174m", "212k/1t", "213k/1t") ) separate(table3, col=rate, into=c("cases", "pop"), sep="/")
【separate_rows】将数据分为多行
tidyr::separate_rows(data, ..., sep)
- data 原始数据
- ... 待分数据所在的列(字段、变量)
- sep 分割数据时使用的风格符
separate_rows(table3, rate, sep=‘/‘)
【unite】将多列按照指定的分隔符合并为一列
tidyr::unite(data, col, ..., sep, remove=TRUE)
- data 原始数据
- col 新生成的字段(变量、列)名
- ... 合并前的字段(变量、列)名
- sep 合并使用的分割符
- remove 是否删除被组合的列
table5 <- tibble( country=rep(c("Afghan", "Brazil", "China"), each=2), century=rep(c(‘19‘, ‘20‘), time=3), year=rep(c(‘99‘, ‘00‘), time=3) ) unite(table5, col="year", century, year, sep="")
处理缺失值
【缺失值识别】
is.na(), is.nan(), is.infinite()
【drop_na】剔除数据中的缺失值
x <- tibble(x1=c("A", "B", "C", "D", "E"), x2=c(1, NA, NA, 3, NA)) drop_na(x, x2) #数据集,指定列
【fill】将数据中的缺失值进行填充(填充的值是缺失值附近的数值)
tidyr::fill(data, ..., direction=c("down", "up"))
fill(x, x2) #默认是用上一个值填充
【replace_na】将缺失值替换为其它值
tidyr::replace_na(data, replace=list(), ...)
replace_na(x, list(x2=2))
参考:R----tidyr包介绍学习 - Little_Rookie - 博客园 (cnblogs.com),R语言 | 数据操作tidyr包 - thunderhit的个人空间 - OSCHINA - 中文开源技术交流社区