R -“文件中的错误(文件,如果为其他(追加,“a”,“w”)):无法打开连接”

fnatzsnv  于 2023-01-03  发布在  其他
关注(0)|答案(3)|浏览(135)

我有一个这样的数据框:

X1                                      X2 X3                       X4
R290601 WOVEN TWILL                    001  6                      231
009-1373  *with perforated L3-0,3      152 NA                     <NA>
R481400 THREAD                       A1282 12                    A0399
0091375 PURE SOCK                      001  6                      072
R282380 SOFTLIN W/FELT                 007  6                      072
R282480 MICROFIBRE                     001  6                      F72
R281200 ARTIFICIAL                   A0638  6                      072

我想遍历各行,对于每行,检查第一列的名称(X1)&在我的计算机中创建一个同名文件夹,并在此文件夹中创建子文件夹,这些子文件夹的名称与其各自的列名称相同(X2),(X3),(X4).当我运行脚本时,我只能看到创建了文件夹R290601 WOVEN TWILL,以及子文件夹0016231,但看不到其余文件夹。我得到了这个错误:
文件(文件,ifelse(append,"a","w"))中出错:无法打开连接
此外,我在第2行收到以下警告:
在目录创建(粘贴0(pth,df$X1 [i]))中:无法创建带有穿孔L3 - 0,3的目录"C:\用户\设备\桌面\Joe\009 - 1373 *",原因是"参数无效"
我的代码是:

getwd()
setwd("C:/Users/Dev/Desktop/Joe")

library(xlsx)
library(rJava)
library(xlsxjars)

#get file names
f = list.files("./")
#read files
dat = lapply(f, function(i){
  x = read.xlsx(i, sheetIndex = 1, sheetName = NULL, startRow = 24,
                endRow = NULL, as.data.frame = TRUE, header = FALSE)
  #return columns with names and colors
  x = x[, c(1, 2, 3, 4), drop=FALSE] 
  #return the data
  x
})

library(plyr)
df1 <- ldply(dat, data.frame) ## convert list into a dataframe

#remove NA's
complete.cases(df1)
x <- df1[complete.cases(df1),]
str(x)

#show only rows that start with numbers or 1 letter and then numbers
df <-df1[grepl("^[0-9]|^[a-zA-Z][0-9].*", df1$X1), ]
print(df)

pth <- "C:/Users/Dev/Desktop/Joe/"

# Iterate within each row of df
for(i in 1:nrow(df)){
  # Create 1st path
  dir.create(paste0(pth , df$X1[i]))
  # Create 2nd and 3rd paths
  dir.create(paste0(pth, df$X1[i], "/",df$X2[i]))
  dir.create(paste0(pth, df$X1[i], "/",df$X3[i]))
  dir.create(paste0(pth, df$X1[i], "/",df$X4[i]))
 
  # write data.frame row as txt
  write.table(df[i, ], file=paste0(pth, df$X1[i], "/", df$X1[i],".txt"), sep=";")
}

为什么我会得到这个错误,我怎么能看到所有的文件夹及其相应的子文件夹?

ql3eal8s

ql3eal8s1#

library(readxl)
library(tidyverse)
## First read the dataframe taht contains Folder & Sub-folder names
df <- read_excel("C:/Users/Dev/Desktop/Joe/df.xlsx") 

## Special characters like "\ / : * ? " < > |" cann't be present in filename,
## So first remove it from the df for every column.
df <- df %>% 
  mutate(across(everything(), .fns = function(x) gsub('[[:punct:]]','', x))) ## '[[:punct:]]' for the special character

setwd('C:/Users/Dev/Desktop/Joe') ## Replace with your working directory


for(i in 1:nrow(df)){
  
  df_name <- df[i, ] %>% 
    select_if(~ !is.na(.x)) %>% 
    select_if(~ .x != 'NA') ## if NA is character & you don't need it
  
  for(j in 1:ncol(df_name)){
    
    if(!is.na(df_name[,j])){
      if(!dir.exists(as.character(df_name[,j]))){
        dir.create(as.character(df_name[,j]), recursive = TRUE)
        setwd(as.character(df_name[,j])) ## Set wd to the newly created dir
        ## X1 --> X2 --> X3 --> X4
      }
    }
    
  }
  
  setwd('C:/Users/Dev/Desktop/Joe') ## Again go back to the main wd

}

## IF you want the folder like this : X1 --> X2, X3, X4 then 

for(i in 1:nrow(df)){
  
  df_name <- df[i, ] %>% 
    select_if(~ !is.na(.x)) %>% 
    select_if(~ .x != 'NA') ## if NA is character & you don't need it
  
  if(!is.na(df_name[,1])){
    if(!dir.exists(as.character(df_name[,1]))){
      dir.create(as.character(df_name[,1]), recursive = TRUE)
      setwd(as.character(df_name[,1])) ## Set wd to the newly created dir
    }
  }
  
  for(j in 2:ncol(df_name)){
    
    if(!is.na(df_name[,j])){
      if(!dir.exists(as.character(df_name[,j]))){
        dir.create(as.character(df_name[,j]), recursive = TRUE)
      }
    }
    
  }
  
  setwd('C:/Users/Dev/Desktop/Joe') ## Again go back to the main wd
  
}
mwngjboj

mwngjboj2#

我遇到了同样的问题,我通过创建一个excel文件来纠正它,该文件的第一列与数据相同(我无法在csv中提取)。无法在csv中提取的数据在这里称为dataA,excel文件(.xl)在这里称为dataB。因此,dataB中的第一列与dataA中的第一列相同。我导入dataB:

dataB <- read_excel(".....")

我只是从dataA到dataB逐个导入列:

dataB$Secondcolumn <- dataA$Secondcolumn

dataB$Thirdcolumn <- dataA$Thirdcolumn

然后:

write.csv(dataB, "dataB")
afdcj2ne

afdcj2ne3#

我刚刚遇到了同样的问题,我意识到这是因为我有它要求在Excel中打开的.csv文件。关闭文件解决了问题。

相关问题