ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 資料合併與分割 資料整理最後來介紹如何合併與分割資料。 - union、cbind 與 rbind 函數 - merge 函數 - split 函數 - subset 函數 ### 資料合併 ~~~ > x <- c(1, 2, 3) > y <- c(10, 20, 30) > union(x ,y) # union 如英文名稱就是取聯集。 [1] 1 2 3 10 20 30 > rbind(x, y) # 透過 row 合併。 [,1] [,2] [,3] x 1 2 3 y 10 20 30 > cbind(x, y) # 透過 column 合併。 x y [1,] 1 10 [2,] 2 20 [3,] 3 30 > x <- cbind(c("Tom", "Joe", "Vicky"), c(27, 29, 28)) > y <- cbind(c("Tom", "Joe", "Vicky"), c(178, 186, 168)) > colnames(x) <- c("name", "age") > colnames(y) <- c("name", "tall") > merge(x, y, by = "name") # 將 data.frame 透過一個欄位進行合併。 name age tall 1 Joe 29 186 2 Tom 27 178 3 Vicky 28 168 > x <- cbind(c("Tom", "Joe", "Vicky", "Bob"), c(27, 29, 28, 25)) > y <- cbind(c("Tom", "Joe", "Vicky", "Bruce"), c(178, 186, 168, 170)) > colnames(x) <- c("name", "age") > colnames(y) <- c("name", "tall") > merge(x, y, by = "name", all = T) # alt 是用來詢問是否顯示所有資料,像 Bob 與 Bruce 都有一欄資料沒有,所以沒下 all = T,應該不會出現 Bob 與 Bruce 資料。 name age tall 1 Bob 25 <NA> 2 Joe 29 186 3 Tom 27 178 4 Vicky 28 168 5 Bruce <NA> 170 > merge(x, y, by = "name", all.x = T) # 只顯示 x 有的資料,所以 Bruce 就不會出現。 name age tall 1 Bob 25 <NA> 2 Joe 29 186 3 Tom 27 178 4 Vicky 28 168 > merge(x, y, by = "name", all.y = T) # 只顯示 y 有的資料,所以 Bob 就不會出現。 name age tall 1 Joe 29 186 2 Tom 27 178 3 Vicky 28 168 4 Bruce <NA> 170 ~~~ ### 資料分割 ~~~ > data <- iris > split(data, sample(rep(1:2, 75))) # rep(1:2, 75) 產生 1,2 交錯的向量,但加了前面的 sample 則是隨機抽取,所以向量 1,2 會被打亂,split 會依照 sample(rep(1:2, 75)) 分組,都是 1 的會在同一組,都是 2 的也會在同一組。 > data <- iris > subset(data, Sepal.Length > 5) # 只會出現 Sepal.Length > 5 的資料 > subset(data, Sepal.Length > 5,select = Sepal.Length) # 只會出現 Sepal.Length > 5 的資料且欄位只有 Sepal.Length,select 代表會出現的欄位。 > subset(data, Sepal.Length > 5,select = -Sepal.Length) # selct = 負的代表不要出現的欄位。 ~~~