資料合併與分割

資料整理最後來介紹如何合併與分割資料。

  • 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 = 負的代表不要出現的欄位。

results matching ""

    No results matching ""