R语言处理表格数据(二)

1. 修改excel表格列名,并合并所有excel

##----------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/29 14:28:59
# @description:修改excel表格列名,并合并所有excel表格
##
# 设置工作目录
setwd("D:/Datasets")

# 导入所需库
library(readxl)
library(plyr)
library(openxlsx)

# 获取文件夹下的所有Excel文件
files <- list.files(pattern = "\\.xlsx$")

# 循环读取并修改每个excel文件
for (file in files) {
  # 读取excel文件
  df <- read_excel(file, sheet = "Sheet1")
  
  # 修改列名
  colnames(df) <- c("x1",	"x2",	"x3",	"x4",	"x5")
  
  # 将修改后的数据保存到原excel文件中
  suppressWarnings(write.xlsx(df, file, sheetName = "Sheet1", 
                              row.names = FALSE)
                   )
}

# 循环读取并合并Excel表格数据
df <- ldply(files, read_excel, .id = "file")[-1,]

# 将数据保存到一个Excel文件中
write.xlsx(df, "merged_data.xlsx", rowNames = FALSE)

2. 分组计算(group)

代码目的: 计算所有x1中相同对象的x2数据的标准差和平均值,并保存。
数据内容:
在这里插入图片描述

##----------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/29 19:03:02
# @description:计算所有x1中相同对象的x2数据的标准差和平均值,并保存

library(dplyr)
df <- read_excel("merged_data.xlsx")

# 按x1分组,计算x5的标准差和平均值
df_summary <- df %>%
  group_by(`x1`) %>%
  summarise(标准差 = sd(`x5`), 平均值 = mean(`x5`))

# 将计算结果添加到原数据框
df <- left_join(df, df_summary, by = "x1")

# 将计算结果写入Excel文件的新列中
write.xlsx(df, "output.xlsx", sheetName = "Sheet1", colNames = TRUE, append = TRUE)

结果展示:
在这里插入图片描述

3. 文件格式转换(txt to xlsx)

##----------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/31 09:27:50
# @description:在该目录中查找所有以“.txt”结尾的文件,并将它们转换为Excel文件。
#              转换后的Excel文件将保存在与txt文件相同的目录中,名称为“txt文件名.xlsx”。
#加载必要的包
library(dplyr)
library(readxl)
library(plyr)
library(openxlsx)

#设置工作目录
setwd("D:/Datasets")

#获取目录中所有txt文件的文件名
txt_files <- list.files(pattern = "\\.txt$")

#循环遍历所有txt文件并转换为Excel文件
for (file in txt_files) {
  #读取txt文件
  data <- read.table(file, header = TRUE, sep = "", fileEncoding = "UTF-8")
  #获取文件名(去除.txt扩展名)
  file_name <- sub("\\.txt$", "", file)
  #写入Excel文件
  write.xlsx(data, paste0(file_name, ".xlsx"), sheetName = "Sheet1", rowNames = FALSE)
}

4. 数据合并,添加新列

##--------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/31 09:27:50
# @description:合并所有excel表,并以文件名生成新列,插入到合并的表格中。

#加载必要的包
library(readxl)
library(dplyr)

#设置工作目录
setwd("D:/Datasets")

#获取目录中所有xlsx文件的文件名
xlsx_files <- list.files(pattern = "\\.xlsx$")

#循环遍历所有xlsx文件并合并为一个数据框
data <- NULL
for (file in xlsx_files) {
  #读取xlsx文件
  temp_data <- read_excel(file)
  #将文件名添加为新列
  temp_data$File <- file
  #将数据添加到总数据框中
  data <- bind_rows(data, temp_data)
}

#将数据按文件名排序
data <- data %>% arrange(File)
#删除添加的文件名列
#data$File <- NULL

write.xlsx(data, "mergedata.xlsx", sheetName = "Sheet1", colNames = TRUE, append = TRUE)

5. 遍历文件夹并对每个xlsx文件进行求和操作

##-----------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/4/8 00:22:23
# @description:遍历文件夹并对每个xlsx文件进行求和操作,并将结果保存在新文件中:
# 导入需要使用的包
library(readxl)

# 获取指定文件夹下的所有xlsx文件
files <- list.files(path = "C:/Users", pattern = "*.xlsx", full.names = TRUE)
files
# 遍历每个xlsx文件
for (file in files) {
  # 读取Excel文件
  df <- read_excel(file)
  
  # 获取第一列中小于-100的行,并对Count求和
  sum1 <- sum(df$Count[df$Value < -100])
  # 获取第一列中大于等于-100且小于-50的行,并对Count求和
  sum2 <- sum(df$Count[df$Value >= -100 & df$Value < -50])
  # 获取第一列中大于等于-50且小于0的行,并对Count求和
  sum3 <- sum(df$Count[df$Value >= -50 & df$Value < 0])
  # 获取第一列中大于等于0且小于50的行,并对Count求和
  sum4 <- sum(df$Count[df$Value >= 0 & df$Value < 50])
  # 获取第一列中大于等于50且小于100的行,并对Count求和
  sum5 <- sum(df$Count[df$Value >= 50 & df$Value < 100])
  # 获取第一列中大于等于100的行,并对Count求和
  sum6 <- sum(df$Count[df$Value >= 100])
  
  # 构造新文件名
  new_file_name <- paste0(tools::file_path_sans_ext(file), "_SUM.xlsx")
  
  # 将数据写入新文件中
  write.xlsx(data.frame(Sum1 = sum1, Sum2 = sum2, Sum3 = sum3, Sum4 = sum4, Sum5 = sum5, Sum6 = sum6), 
             file = new_file_name)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jackson的生态模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值