首页 > 解决方案 > 将 DF 拆分为几列

问题描述

我有一列我希望分成几列。我对正则表达式不太熟悉,所以我不确定解决这个问题的正确方法。

样本数据

df <- tibble::tribble(
                  ~player,
    "Eloy Jimenez OF CHW",
  "Fernando Tatis Jr SS SD"
  )

我正在寻找拆分 Caps 开始的列。例如:

output_df <- tibble::tribble(
  ~col1, col2, col3,
  "Eloy Jimenez", "OF", "CHW",
  "Fernando Tatis Jr", "SS", "SD"
)

提前致谢。

标签: rtidyr

解决方案


我们可以使用extractfromtidyr从字符串末尾捕获大写字符

library(stringr)
library(tidyr)
df %>% 
   extract(player, into = str_c('col', 1:3), '^(.*)\\s+([A-Z]+)\\s+([A-Z]+)$')
# A tibble: 2 x 3
#  col1              col2  col3 
#  <chr>             <chr> <chr>
#1 Eloy Jimenez      OF    CHW  
#2 Fernando Tatis Jr SS    SD   

strcapturebase R

strcapture('^(.*)\\s+([A-Z]+)\\s+([A-Z]+)$', df$player,
   data.frame(col1 = character(), col2 = character(), col3 = character()))
#               col1 col2 col3
#1      Eloy Jimenez   OF  CHW
#2 Fernando Tatis Jr   SS   SD

推荐阅读