在 R 中將列拆分為兩列

Jinku Hu 2023年1月30日 2021年7月16日
  1. 在 R 中使用 separate 函式將列拆分為兩列
  2. 在 R 中使用 extract 函式將列拆分為兩列
  3. 使用 str_split_fixed 函式將 R 中的列拆分為兩列
在 R 中將列拆分為兩列

本文將介紹如何在 R 中使用 separate 將一列拆分為兩列。

在 R 中使用 separate 函式將列拆分為兩列

separatetidyr 包的一部分,它可用於將一個字元列拆分為多個帶有正規表示式或數字位置的列。在此程式碼示例中,我們宣告瞭一個包含逗號分隔的姓名/姓氏對字串的資料框。separate 函式將資料框作為第一個引數,將列名作為第二個引數。第三個參數列示將成為新建立的字元向量的列名的變數名。請注意,我們使用 %>% 管道將 df 物件傳遞給 separate 函式。可以在名稱和姓氏用點分隔符分隔的資料幀上呼叫相同的函式呼叫。

library(dplyr)
library(tidyr)
library(stringr)

df <- data.frame(x = c('John, Mae', 'Maude, Lebowski', 'Mia, Amy', 'Andy, James'))
df1 <- data.frame(x = c('John. Mae', 'Maude. Lebowski', 'Mia. Amy', 'Andy. James'))

df %>% separate(x, c('Name', 'Surname'))

df1 %>% separate(x, c('Name', 'Surname'))

輸出:

> df %>% separate(x, c('Name', 'Surname'))
   Name   Surname
1  John       Mae
2 Maude  Lebowski
3   Mia       Amy
4  Andy     James

> df1 %>% separate(x, c('Name', 'Surname'))
   Name  Surname
1  John      Mae
2 Maude Lebowski
3   Mia      Amy
4  Andy    James

在 R 中使用 extract 函式將列拆分為兩列

將一列拆分為兩個單獨的列的另一個有用功能是 extract,它也是 tidyr 包的一部分。extract 函式適用於使用正規表示式組的列。請注意,每個正規表示式組都應對映到前一個引數中的專案。如果組和專案不匹配,則輸出將具有 NA 值。

library(dplyr)
library(tidyr)
library(stringr)

df <- data.frame(x = c('John, Mae', 'Maude, Lebowski', 'Mia, Amy', 'Andy, James'))

df %>% extract(x, c("Name", "Surname"), "([^,]+), ([^)]+)")

輸出:

> df %>% extract(x, c("Name", "Surname"), "([^,]+), ([^)]+)")

   Name  Surname
1  John      Mae
2 Maude Lebowski
3   Mia      Amy
4  Andy    James

使用 str_split_fixed 函式將 R 中的列拆分為兩列

或者,我們可以使用 stringr 包中的 str_split_fixed 函式。它匹配給定的字元模式並將字元向量拆分為相應的列數。雖然,使用者可以明確地傳遞要返回的拆分專案的數量。專案數作為第三個引數傳遞。

library(dplyr)
library(tidyr)
library(stringr)

df <- data.frame(x = c('John, Mae', 'Maude, Lebowski', 'Mia, Amy', 'Andy, James'))

str_split_fixed(df$x, ", ", 2)

輸出:

> str_split_fixed(df$x, ", ", 2)
     [,1]    [,2]      
[1,] "John"  "Mae"     
[2,] "Maude" "Lebowski"
[3,] "Mia"   "Amy"     
[4,] "Andy"  "James"
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn