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 - 中文開源技術交流社區