R 以这种格式拆分一列
R split a column in this format
我需要将此列拆分为 2 列
- 2020 年 5 月 5 日汤姆·特斯拉
期望的结果是
- 第 1 列第 2 列
- 5/5/2020 汤姆特斯拉
我已经尝试过 strAny 但需要帮助,因为 Col 1 不是固定的,因为日期字段长度会因每月的一天有 1 个或 2 个字符而有所不同。
有什么建议如何做到这一点?
我们可以使用 separate
和正则表达式环视来分割数字和小写字母
library(tidyr)
separate(df1, 'col1', into = c('date', 'other'), sep="(?<=[0-9])(?=[A-Za-z])")
# date other
#1 1/1/2000 yogurt
#2 1/1/2000 toilet paper
#3 2/1/2000 soda
#4 11/1/2000 bagels
#5 12/1/2000 fruits
#6 13/1/2000 laundry detergent
或使用 base R
和 strsplit
do.call(rbind, strsplit(as.character(df1$col1),
"(?<=[0-9])(?=[A-Za-z])", perl = TRUE))
数据
df1 <- structure(list(col1 = c("1/1/2000yogurt", "1/1/2000toilet paper",
"2/1/2000soda", "11/1/2000bagels", "12/1/2000fruits", "13/1/2000laundry detergent"
)), class = "data.frame", row.names = c(NA, -6L))
这里有几种方法:
使用 tidyr
中的 extract
:
tidyr::extract(df, col1, c('col1', 'col2'), regex = '(.*\d)(.*)')
或 dplyr
和 stringr
:
library(dplyr)
library(stringr)
df %>%
mutate(col2 = str_extract(col1, '\d+/\d+/\d+'),
col3 = str_remove(col1, col2))
我需要将此列拆分为 2 列
- 2020 年 5 月 5 日汤姆·特斯拉
期望的结果是
- 第 1 列第 2 列
- 5/5/2020 汤姆特斯拉
我已经尝试过 strAny 但需要帮助,因为 Col 1 不是固定的,因为日期字段长度会因每月的一天有 1 个或 2 个字符而有所不同。 有什么建议如何做到这一点?
我们可以使用 separate
和正则表达式环视来分割数字和小写字母
library(tidyr)
separate(df1, 'col1', into = c('date', 'other'), sep="(?<=[0-9])(?=[A-Za-z])")
# date other
#1 1/1/2000 yogurt
#2 1/1/2000 toilet paper
#3 2/1/2000 soda
#4 11/1/2000 bagels
#5 12/1/2000 fruits
#6 13/1/2000 laundry detergent
或使用 base R
和 strsplit
do.call(rbind, strsplit(as.character(df1$col1),
"(?<=[0-9])(?=[A-Za-z])", perl = TRUE))
数据
df1 <- structure(list(col1 = c("1/1/2000yogurt", "1/1/2000toilet paper",
"2/1/2000soda", "11/1/2000bagels", "12/1/2000fruits", "13/1/2000laundry detergent"
)), class = "data.frame", row.names = c(NA, -6L))
这里有几种方法:
使用 tidyr
中的 extract
:
tidyr::extract(df, col1, c('col1', 'col2'), regex = '(.*\d)(.*)')
或 dplyr
和 stringr
:
library(dplyr)
library(stringr)
df %>%
mutate(col2 = str_extract(col1, '\d+/\d+/\d+'),
col3 = str_remove(col1, col2))