1. 程式人生 > 其它 >R語言之讀取資料夾的資料

R語言之讀取資料夾的資料

技術標籤:r語言

讀取檔案路徑:一層目錄(“示例”)、二層目錄(“資料1”、“資料2”)下的表格資料。

“示例”檔案下:
在這裡插入圖片描述
“資料1”檔案下:
在這裡插入圖片描述
“資料2”檔案下:
在這裡插入圖片描述

讀取資料夾

rm(list=ls()) #清除變數
# getwd() #獲取當前的工作目錄
setwd("D:/data_r") #指定工作目錄
first_file_name <- list.files("示例")       #使用list.files得到“示例”資料夾的所有資料夾的名稱
dir <- paste("./示例/",first_file_name,sep = "")            #用paste命令構建路徑變數dir
n <- length(dir)           #讀取dir長度(“示例”檔案下的檔案個數)

n_sub <- rep(0,n)   #生成n個0向量
n_sub <- as.data.frame(n_sub)    #轉換成資料框
n_sub <- t(n_sub)      #轉置

讀取資料時先讀取一個表的資料儲存在data中,後續讀取的表格資料使用cbind函式依次新增到data中。

data <- readxl::read_excel("D:/data_r/示例/資料1/表一.xlsx")
for (i in 1:n) {   
  b=list.files(dir[i])    #讀取“示例”下各個資料夾的表
  print(b)
  n_sub[i]=length(b)        #把“示例”下各個資料夾的表的個數存在n_sub中
  for (j in 1:n_sub[i]) {
    file=paste(dir[i],"/",b[j],sep = "")
    new_data <- readxl::read_excel(file)
    print(dim(new_data))
    # new_data <- new_data[-1,]   #刪除第一行
    # names(new_data) <- NULL   #會報錯
    if(i==1&j==2){  #讀到表一的資料跳過
      next
    } else{
      data <- rbind(data,new_data) #rbind合併兩個資料框,不用擔心行名的問題
    }
  }
}

輸出:
在這裡插入圖片描述

資料處理

data1 <- data[nchar(data$聯絡方式)==11,]     # 篩選出電話號碼是11位
dim(data1)

data2 <- data1[!duplicated(data1$聯絡方式),]   # 電話號碼去重後的資料
dim(data2)

write.table(data2,"去重資料.csv",sep=",",row.names = FALSE) # 寫入資料

可參考連結:https://www.cnblogs.com/lzllovesyl/p/5170032.html