在 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