如何在R中的变量内向变量分配新数据

时间:2019-07-26 03:08:12

标签: r

我的文件名是工作目录中的all.files。我想循环读取这些文件,并为每个文件将名称分配为gsub(".csv","", all.files)

all.files <- c("harvestA.csv", "harvestB.csv", "harvestC.csv", "harvestD.csv", 
"seedA.csv", "seedB.csv", "seedC.csv", "seedD.csv")

我在下面尝试了类似的方法,但是它不起作用。我在这里需要什么?

for(i in 1:length(all.files)){
  assign(gsub(".csv","", all.files)[i]) <- read.table(
    all.files[i],
    header = TRUE,
    sep = ","
  )
}

3 个答案:

答案 0 :(得分:2)

您可以将它们保留在命名列表中,因为用大量全局变量来使环境混乱不是一种好习惯

list_df <- lapply(all.files, read.csv)
names(list_df) <- sub("\\.csv", "", all.files)

您始终可以将单个数据帧提取为list_df[["harvestA"]]list_df[["harvestB"]]等。

如果您仍然需要将它们作为单独的数据框

list2env(list_df, .GlobalEnv)

答案 1 :(得分:1)

.是正则表达式中与任何字符匹配的元字符。因此,我们可以使用fixed = TRUE来匹配文字点。另外,在OP的代码中,使用assign时,不需要另一个赋值运算符(<-),assign中的第二个参数是value,这里是用read.table

读取的数据集
for(i in 1:length(all.files)){
     assign(sub(".csv","", all.files, fixed = TRUE)[i], read.table(
       all.files[i],
        header = TRUE,
        sep = ","
    ))
   }

答案 2 :(得分:0)

使用strsplit

的选项
for (i in seq_along(all.files)) {
      assign(x = strsplit(allfiles[i],"\\.")[[1]][1], 
             value = read.csv(all.files[i]),
             pos = .GlobalEnv)
    }