【问题标题】:Matching names of elements in a list to filenames & renaming variables in R将列表中元素的名称与文件名匹配并重命名 R 中的变量
【发布时间】:2016-11-17 23:12:43
【问题描述】:

所以我编写了一个脚本来更改数据框,但是我遇到了一些我似乎无法解决的问题。首先,我想将列变量mac_sector重命名为扇区的部分,似乎不起作用,它没有重命名任何东西,也没有报错。

此外,当我保存修改后的数据集时,它们被简单地称为 1、2、3... 等等。但是,我实际上只是希望它们具有与原来相同的名称。我尝试通过"names(dflist)[i] <- gsub("\\.dta$", "", files)" 执行此操作,但这不起作用。

它也给出了这些警告消息,虽然我不知道它们是否对文件有实际影响,因为我没有看到任何并发症: 警告信息:

1: In save.dta13(dflist[[i]], paste0(i, ".dta")) :
  Number of variable labels does not match number of variables.
            Variable labels dropped.
2: In save.dta13(dflist[[i]], paste0(i, ".dta")) :
  Number of variable labels does not match number of variables.
            Variable labels dropped.
3: In save.dta13(dflist[[i]], paste0(i, ".dta")) :
  Number of variable labels does not match number of variables.
            Variable labels dropped. 

最后,有没有办法将文件保存到工作目录以外的其他目录?

我的脚本:

setwd("C:\\....")

    files = list.files(pattern="*.dta") 
    dflist <- list()

    for (i in 1:length(files)){
      dflist[[i]] <- read.dta13(files[i], nonint.factors = TRUE)


      if("mac_sector" %in% colnames(dflist[[i]])){            #rename mac_sector to sector if present   
        rename(dflist[[i]], c(mac_sector="sector"))}

      if(!("sector" %in% colnames(dflist[[i]]))){             #This creates "sector" variable if it doesn't exist already.
        dflist[[i]]$sector <- "total"}


      names(dflist)[i] <- gsub("\\.dta$", "", files)          #Matching the names of the elements to the filenames

      save.dta13(dflist[[i]], paste0(i, ".dta"))              #Saving dataset
    }

输入: 数据框 1:

country     SA year          DV       VI     DI       DIV     DIV_s  DIV_p                  t            ta               
1  AUSTRIA   NA 2001         0      NA       NA      NA     NA       NA                  0               NA
2  AUSTRIA   NA 2002         0      NA       NA      NA     NA       NA                  0               NA
3  AUSTRIA   NA 2003         0      NA       NA      NA     NA       NA                  0               NA
4  AUSTRIA   NA 2004         0      NA       NA      NA     NA       NA                  0               NA
5  AUSTRIA   NA 2005         0      NA       NA      NA     NA       NA                  0               NA

数据框 2:

country      mac_sector      SA year          DV       VI     DI       DIV     DIV_s  DIV_p                  t            ta 
1  BELGIUM     ing            0 2001         0      NA       NA      NA     NA       NA               3036       0.09725133
2  BELGIUM     ing            0 2002         0      NA       NA      NA     NA       NA               2970       0.09641831
3  BELGIUM     ing            0 2003         0      NA       NA      NA     NA       NA               2917       0.09791633
4  BELGIUM     ing            0 2004         0      NA       NA      NA     NA       NA               2907       0.10297798
5  BELGIUM     ing            0 2005         0      NA       NA      NA     NA       NA               2904       0.10182869

数据框 3:

country                       sector SA year          DV       VI     DI       DIV     DIV_s  DIV_p                  t            ta
1  BELGIUM                        prod     0 2001         0      NA       NA      NA     NA       NA                392       0.09688306
2  BELGIUM                        prod     0 2002         0      NA       NA      NA     NA       NA                398       0.09394456
3  BELGIUM                        prod     0 2003         0      NA       NA      NA     NA       NA                394       0.09536502
4  BELGIUM                        prod     0 2004         0      NA       NA      NA     NA       NA                404       0.10367264
5  BELGIUM                        prod     0 2005         0      NA       NA      NA     NA       NA                407       0.08961585

【问题讨论】:

    标签: r dataframe save rename names


    【解决方案1】:

    试试这个,不再需要plyr 库,应该可以重命名并保存为您想要的新位置的文件名:

    setwd("C:\\...")
    files = list.files(pattern="*.dta") 
    dflist <- list()
    
    for (i in 1:length(files)){
      dflist[[i]] <- read.dta13(files[i],header=TRUE)
    
      if("mac_sector" %in% colnames(dflist[[i]])){            #rename mac_sector to sector if present   
        names(dflist[[i]])[names(dflist[[i]])=="mac_sector"] <- "sector"
        #rename(dflist[[i]], replace = c("mac_sector"="sector"))}
    
      if(!("sector" %in% colnames(dflist[[i]]))){             #This creates "sector" variable if it doesn't exist already.
        dflist[[i]]$sector <- "total"}
    
    
    names(dflist)[i] <- gsub("\\.dta$", "", files[i])          #Matching the names of the elements to the filenames
    
    save.dta13(dflist[[i]],paste0("C:\\...\\newlocation\\",names(dflist)[i], ".dta"))              #Saving dataset
    }
    

    【讨论】:

    • 是的,我已经试过rename(dflist[[i]], c("mac_sector"="sector")),不行! names(dflist)[i] &lt;- gsub("\\.dta$", "", files[i]) 也没有,它们仍然保存为 1,2,3...
    • 我包含了我的输入数据的样子,如果有帮助的话。
    • 我更新了文件保存,试试看。我也会调查其他的。
    • 重命名现在可以了,谢谢!!但是,当我添加到脚本中时:save.dta13(dflist[[i]],paste0("C:\\Users\\DuEllier\\k",names(dflist)[i], ".dta")),发生了一些奇怪的事情。首先,它仍然将数据帧保存到原始工作目录,其次,它以原始名称保存数据帧,但在开头添加了一个 k ?像这样:“kdataframe1”。但至少它现在使用的名称..
    • 很高兴有一部分是固定的!命名问题可能与粘贴有关。请改用save.dta13(dflist[[i]],paste0("C:\\Users\\DuEllier\\k\\",names(dflist)[i], ".dta"))。路径末尾需要斜杠,以便将文件放入正确的目录中。
    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2021-10-21
    • 2017-02-16
    • 2014-12-19
    • 2023-03-29
    • 2021-09-16
    相关资源
    最近更新 更多