r语言 - 如何通过添加文件名的部分来加入多个txt,然后保存csv?



我需要打开多个txt(都有相同数量的变量和变量名称,见图[1]);对于每个列,添加带有其文件名特定部分的多个列;然后保存合并所有文本的CSV文件,其中添加的列对应于每个文本的唯一文件名。

文件名看起来像:

NVR_ch2_main_20220505140000_20220505150000 

和我需要三列:

Month (05, the first of the two after 2022),  
Day (05) and  
hour (14). 

一个文本数据源的示例

dput(head('NVR_ch2_main_20220505132105_20220505140000.txt'))
# A tibble: 41 x 8 
Selection View Channel Begin Time (s) End Time (s) Low Freq (Hz) High Freq (Hz)
type <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl> 
1 1 Waveform 1 1 790. 792. 0 4000 NA 
# ... with 37 more rows

我用一个文件的整个文件名管理这个过程:

read_tsv('NVR_ch2_main_20220505132105_20220505140000.txt') %>%
mutate(filename = 'NVR_ch2_main_20220505132105_20220505140000.txt') %>% 
select(filename, everything ()) %>% 
write_csv('C:/Users/marta/Documents/R/Crete/NVR_ch2_main_20220505132105_20220505140000.csv')

试试这个。我不能保证它会起作用,因为我没有你的数据,但这应该找到所有的文件与共同的前缀,提取月,日和小时从文件名,然后读取所有的数据作为一个组合文件:

library(tidyverse)
tibble(file = list.files(pattern = "NVR.*\.txt")) |>
  extract(file, 
          into = c("month", "day", "hour"), 
          regex = ".*\w_\d{4}(\d{2})(\d{2})(\d{2})\d{4}_", 
          remove = FALSE, 
          convert = TRUE) |>
  mutate(data = map(file, read_tsv)) |>
  unnest(data)
library(tidyverse)
list_of_files <- list.files("C:/Users/marta/Documents/R/Crete", pattern="tsv", full.names=T)
fun1 <- function(x) {
    df1 <- read_tsv(x, comment = "#") 
    newname <- gsub("tsv", "csv", x)
    df1$month <- rep(str_sub(x, 18, 19), nrow(df1))
    df1$day <- rep(str_sub(x, 20, 21), nrow(df1))
    df1$hour = rep(str_sub(x, 22, 23), nrow(df1))
    write.csv(df1, newname)
    }
    
lapply(list_of_files, fun1)

您可能需要调整str_sub()调用中的数字,以便从文件名中获得正确的位置。

注意列可能是字符。如果您需要month, dayhour的数字,您应该将str_sub()更改为as.numeric(str_sub())

相关内容

  • 没有找到相关文章

最新更新