是否有dplyr工作流程采用非标准文件名并强制它们具有结构?

时间:2019-02-18 21:14:23

标签: r dplyr pipe grepl

我正在阅读别人发送的文件。这些文件的常规结构比较松散,但是不一致。我正在尝试获取文件名,使用dplyr处理它们,并创建符合我自己的标准的新文件名。

农作物永远是“玉米”,我试图用它来确定文件名是否时髦。我试过使用单独的gsub,grepl和ifelse语句,但是它们都很笨拙,无法正常工作。我是dplyr的新手(和stackoverflow),需要一些指导。谢谢您的帮助!

文件名示例

dat <- tibble(filename = c("2017.Ames-Corn-early.out", 
                    "2017.Cobs-Corn.out",
                    "2017.MuscCorn_lowN.out"))

第一次尝试:

dat %>%
  # Separate, it is inconsistent, needs work 
  separate(filename, into = c("year", "site", "crop", "trt", "other"))

所需结构,以小标题形式:

dat2 <- tribble(
  ~year, ~ site, ~crop, ~trt,
  2017,   "Ames", "Corn", "early",
  2017,   "Cobs", "Corn", NA,
  2017,   "Musc", "Corn", "lowN")
dat2

1 个答案:

答案 0 :(得分:1)

这是部分答案。我不知道拆分大写字母的好方法,但是可能有一种简单的正则表达式。

library(tidyverse)
dat2 <- dat %>%
  mutate(filename = str_remove(filename, "\\.out")) %>%
  separate(filename,  
           c("year", "site", "crop", "trt"), 
           sep = "[[:punct:]]")

> dat2
# A tibble: 3 x 4
  year  site     crop  trt  
  <chr> <chr>    <chr> <chr>
1 2017  Ames     Corn  early
2 2017  Cobs     Corn  NA   
3 2017  MuscCorn lowN  NA