是否有一个dplyr工作流来获取非标准文件名并迫使它们具有结构?

问题描述 投票:1回答:1

我正在阅读其他人发送的文件。这些文件的总体结构松散,但不一致。我正在尝试获取文件名,使用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"))

期望的结构,以tibble形式:

dat2 <- tribble(
  ~year, ~ site, ~crop, ~trt,
  2017,   "Ames", "Corn", "early",
  2017,   "Cobs", "Corn", NA,
  2017,   "Musc", "Corn", "lowN")
dat2
r dplyr pipe grepl
1个回答
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  
© www.soinside.com 2019 - 2024. All rights reserved.