在 R 中将列拆分为两列
本文将介绍如何在 R 中使用 separate
将一列拆分为两列。
在 R 中使用 separate
函数将列拆分为两列
separate
是 tidyr
包的一部分,它可用于将一个字符列拆分为多个带有正则表达式或数字位置的列。在此代码示例中,我们声明了一个包含逗号分隔的姓名/姓氏对字符串的数据框。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"
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