【问题标题】:Add prefix to each element list in R为R中的每个元素列表添加前缀
【发布时间】:2020-01-27 18:43:12
【问题描述】:

我有很多 csv 文件,我使用 lapply 和 vroom 包读取它们(它有 18 个文件,每个文件中有数百万行)

library(vroom)
filelist <- list.files(pattern = "*.csv")

输入(文件列表)

c("UPW_119_1.csv", "UPW_119_2.csv", "UPW_119_3.csv")

files <- lapply(filelist, FUN=vroom)

假设下面是我的列表的样子:

files <- list(no1= c("1","2","3","4","5"), no2= c(1:3),no3 = c("190301010141","190301010141","190301010143","19030101014","190301010145"))

我想为列表中的每个元素添加“91”前缀,后跟它们在文件列表中的文件名

我尝试过类似的方法,但它不正确

mytry :
files2 <- paste0("91", files, fileslist[i]) #Adding file name

需要的输出

## List of 3
##  $ f1  : int [1:5] 911_UPW_119_1 912_UPW_119_1 913_UPW_119_1 914_UPW_119_1 915_UPW_119_1
##  $ no2: int [1:3] 911_UPW_119_2 912_UPW_119_2 913_UPW_119_2 
##  $ no3: int [1:5] "9190301010141_UPW_119_3","91190301010141_UPW_119_3","91190301010143_UPW_119_3","9119030101014_UPW_119_3","91190301010145_UPW_119_3")

然后我想写这些 csv 文件

总而言之,读取 18 个 csv 文件,按照上述方式进行修改,添加“91”(静态)和文件名(动态),然后写入 18 个 csv 文件

我研究了很多,尝试了 lapply 和 list 功能等但没有帮助!

【问题讨论】:

  • 我一定会试试这个,有没有一种快速/节省内存的方法?因为有 18 个文件,每个文件都有数百万行。这种执行方式看起来很慢

标签: r list data.table tidyverse


【解决方案1】:

你可以使用 lapply:

filelist <- c("UPW_119_1.csv", "UPW_119_2.csv", "UPW_119_3.csv")
files <- list(no1= c("1","2","3","4","5"), no2= c(1:3),no3 = c("190301010141","190301010141","190301010143","19030101014","190301010145"))

lapply(1:length(files), function(k) paste(91, files[[k]], sub(".csv", "", filelist[[k]], fixed = TRUE), sep = "_"))

它在lapply中被矢量化了,所以效率很高

【讨论】:

  • 当我运行它而不是在所有元素前面加上前缀 91 时,我得到了一个奇怪的输出,它完成了类似 "91c(7409476775, 8393990218, xxx) 和与后缀部分类似的内容。它们应该附加到每个元素上,不确定这会产生什么结果
  • 第二点,列表元素的结尾看起来像 (xxx 8954911746)UPW_119_1.csv_") 。我不希望每个元素的后缀中也有 .csv
  • 嗨,我仍然得到这种格式的文件:“91_c(7409476775,xxx,xxx)_UPW_119_1”我想要每个数字后面的 91 和后缀部分
  • 我看到您的示例输出和输入效果很好,但遗憾的是我在实际数据上没有得到相同的结果
  • @Priyanka 请检查dputfilelistfiles。我们应该离您的真正需求不远。
猜你喜欢
  • 2021-09-26
  • 2017-03-05
  • 2021-07-28
  • 2011-03-20
  • 2013-10-25
  • 1970-01-01
  • 2023-04-02
  • 2021-10-04
  • 2019-09-14
相关资源
最近更新 更多