1

我有一个问题,目前我正在尝试拆分excel文件中的单元格,如果该行以数字开头(以及两位数的加号)并且数字后跟句号,我可以拆分每一行“.”,即由该函数中定义的正则表达式定义。但是,当实际拆分发生时,输出是基于其他列的重复(循环)。

在这里你可以找到我的输入数据当前输出,这是想要的输出

# Load libraries
library('tidyverse')
library('readxl')
library('openxlsx')

# Set functions
do_split = function(x, pattern = "\\d+\\.\\s{1}"){
if( is_tibble(x) ){ x = pull(x) }
num_bullets = x %>% str_extract_all("\\d+\\. ") %>% unlist
x %>% str_split(pattern) %>% unlist %>% .[.!=""] %>% str_c(num_bullets,.) %>% list %>% return
}
# Read data
df = read_excel(path = '~/Desktop/master.xlsx')


# Wrangle data
o = df %>%
mutate(Result = Result %>% do_split, Steps  = Steps %>% do_split) %>%
unnest(Result, Steps)
# Output file
write.xlsx(x = o, file = “out.xlsx”)
4

1 回答 1

0

使用rowwise(),以便您的 mutate 命令一次在一行上使用...

df %>% 
  rowwise() %>% 
  mutate_at(vars(Result, Steps), funs(do_split(.))) %>% 
  unnest()

如果您不需要分隔符(在您的情况下是前导数字,例如“1.”),tidyr::separate_rows()可能更容易/更干净......

df %>% 
  separate_rows(Result, Steps, sep = "\\d+\\. ") %>% 
  filter(Result != "")
于 2018-04-24T20:37:16.160 回答