您好,登錄后才能下訂單哦!
這篇文章主要介紹“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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。