目录

  • 写在前面
  • 1. Excel有上百列数据,把每列数据首尾相接合并成一个向量(一列)
  • 2. 合并多个数据表(.csv)
  • 3. 实现2个Excel表相同数据的关联,并提取相同数据到新表
  • 4. 获取Excel表里面列名为TEM的所有数据并保存
  • 5. 将文件夹中的.dbf文件转换为.xlsx文件
  • 6. excel表格中生成重复数据
  • 7. 表格数据按列合并!!!

写在前面

  这是我新开的一个专题,专门用来记录我在处理数据的过程中遇到的一些问题,并且记录下我使用R语言处理表格数据(主要是.xlsx和.csv数据)的过程(包括一些“坑”),之后还会继续更新。如果能帮到你,顺便给博主点个赞吧!

1. Excel有上百列数据,把每列数据首尾相接合并成一个向量(一列)

需要处理的文件:

#---------------------------------------------------------------------
## @ author:JAckson Zhao
#  @ time:2023/3/16 20:31:48
# @ description:Excel有上百列数据,把每列数据首尾相接合并成一个向量(一列)
setwd("D:/R语言")
library(readxl)
df <- read_excel("D:/R语言/1.xlsx")
df# 将两列数据首尾相连合并为一列
merged_col <- paste(data$a, data$b, sep = "")##法1:
# 将列a和列b首尾相接合并成一个向量
new_col <- c(df$a, df$b)
# 将新的向量转换为一个新的数据框
new_df <- data.frame(new_col)
new_df##法2:
# 在 R 语言中,unlist() 函数用于将一个嵌套的列表或向量转换为一个单层的向量。
# 如果一个列表或向量是多层嵌套的,它的元素可以是列表或向量,则 unlist() 函数可以将所有元素拉平为一个单层的向量。
# 这个函数在处理数据集时非常有用,因为许多函数需要输入一个单层的向量,而不是嵌套的列表或向量
vector <- unlist(df)
new_df1 <- data.frame(vector)
new_df1write.table(new_df,"dataframe.xlsx", sep = "\t", quote = FALSE, row.names = FALSE)
write.table(new_df,"vector.xlsx", sep = "\t", quote = FALSE, row.names = FALSE)

结果展示:
1、dataframe.xlsx:

2、vector.xlsx:

2. 合并多个数据表(.csv)

数据列表:

setwd("D:/R语言/practice")
# 设置文件夹路径
folder_path <- "D:/R语言/practice"# 获取所有.csv文件的路径
file_paths <- list.files(folder_path, pattern = "\\.csv$", full.names = TRUE)
file_paths <- file_paths[order(as.numeric(gsub("\\D", "", file_paths)))]
file_paths# 提取文件名中的数字,并用作列名
colnames <- gsub("\\D", "", basename(file_paths))
colnames <- paste("file", colnames, sep = "")
colnames# 读取并整理数据
data_list <- lapply(file_paths, function(file_path) {data <- read.csv(file_path, header = FALSE, stringsAsFactors = FALSE)names(data) <- c("rowname", basename(file_path))data.frame(rowname = data$rowname, data[[2]], stringsAsFactors = FALSE)
})
data_list# 合并数据
merged_data <- Reduce(function(x, y) merge(x, y, by = "rowname", all = TRUE), data_list)# 修改列名
names(merged_data)[-1] <- colnames# 将合并的数据写入新的.csv文件
write.csv(merged_data, file = "merge.csv", row.names = FALSE)

输出结果:

结果展示:


3. 实现2个Excel表相同数据的关联,并提取相同数据到新表

##----------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/18 11:15:08
# 数据匹配:实现2个Excel表相同数据的关联,并提取相同数据到新表
library(dplyr)
library(readxl)setwd("D:/dataset")
a <- read_excel("yan.xlsx")
b <- read_excel("1.xlsx")
dim(a)
dim(b)new_df <- inner_join(a, b, by = "X1", multiple = "all")
dim(new_df)new_df$平均气温 <- new_df$平均气温 * 0.1
head(new_df$平均气温)
new_df$`20-20时累计降水量` <- new_df$`20-20时累计降水量` *0.1
head(new_df$`20-20时累计降水量`)
head(new_df)write.table(new_df,"1new.xlsx", sep = "\t", quote = FALSE, row.names = FALSE)# 计算不重复数据的个数
unique_count <- n_distinct(unique(new_df[,1]))
unique_count#c<- unique(new_df[,1]) # 218个不重复数据,with 208 more rows

4. 获取Excel表里面列名为TEM的所有数据并保存

##-------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/18 14:32:39
# 获取Excel表里面列名为TEM的所有数据并保存
library(readxl)# 读取原始数据表
data <- read_excel("123.xlsx")
head(data)
dim(data)# 匹配包含"TEM"的列名
tem_cols <- grep("PRE", names(data), value = TRUE)# 选择包含"TEM"的列
new_data <- data[, tem_cols]
new_data# 保存到新Excel表格中
write.table(new_data,"123new.xlsx", sep = "\t", quote = FALSE, row.names = FALSE)

5. 将文件夹中的.dbf文件转换为.xlsx文件

##-------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/24 17:42:12
# 将文件夹中的.dbf文件转换为.xlsx文件
# 导入需要使用的包
library(foreign)
library(openxlsx)# 设置工作目录和输出目录
setwd("D:\\dataset")
out_folder <- "8"# 获取所有.dbf文件
dbf_files <- list.files(pattern = "\\.dbf$")
dbf_files# 遍历所有.dbf文件
for (file in dbf_files) {# 读取.dbf文件dbf_data <- read.dbf(file)# 构造输出路径和文件名out_file <- file.path(out_folder, paste0(out_folder, tools::file_path_sans_ext(file), ".xlsx"))# 将数据写入.xlsx文件write.xlsx(dbf_data, out_file)message(paste0("Converted ", file, " to ", out_file))
}

6. excel表格中生成重复数据

##--------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/24 19:20:03
# @description:文件夹下有多个Excel表格,每个excel表格中有2列数据,第一列列名为value,第二列列名为Count,
#               以第一列的数据为基础,将其生成对应的第二列数值个数的重复数据,例如,第一列数据为297,第二列数据为25,
#               即生成25个297,并将所有数据保存为一列。为每个Excel表生成一个对应的.csv文件,
#               文件名按照其对应的.xlsx的文件名命名
library(tidyverse)# 设置工作目录
setwd("D:/dataset")# 获取所有Excel文件的文件名
excel_files <- list.files(pattern = "*.xlsx")
excel_files# 定义一个函数,用于处理单个Excel文件
process_excel <- function(file) {# 读取Excel文件df <- read_excel(file)# 将数据展开成重复的向量values <- rep(df$Value, df$Count)# 将向量转换为数据框,并且将列名设置为"value"output_df <- data.frame(value = values)# 构造输出文件名,并将数据保存为CSV文件output_file <- paste0(tools::file_path_sans_ext(file), ".csv")write_csv(output_df, output_file)
}# 遍历所有Excel文件,并处理每个文件
lapply(excel_files, process_excel)

7. 表格数据按列合并!!!

这里我花了很多时间编写,得出来以下的结论:

注意:R语言合并数据时要求所有数据的行数相同,否则无法进行合并,会报错:

Error in data.frame(…, check.names = FALSE) :
参数值意味着不同的行数: 33, 1064

  这个代码假设所有.csv文件都在同一个文件夹中,并且它们都只有一列数据。它将所有数据列并排放置在新的csv文件中,其中列名是原始文件名(不带.csv后缀)。如果某些csv文件中的行数不同,则该代码将生成带有缺失值的数据框。

代码思路:
  1、找到所有.csv文件中最大的行数,a;
  2、将所有.csv文件用“-1”填充到最大行数;
  3、数据合并

##----------------------------------------------------------------------------------------
# @author:Jackson Zhao
# @time:2023/3/24 23:51:06
# @description:设置工作目录为该文件夹
library(tidyverse)setwd("D:/data")
# 获取文件夹中的所有.csv文件
csv_files <- list.files(path = "D:/data", pattern = "\\.csv$")# 定义一个函数用于读取文件并返回行数
get_row_count <- function(file_path) {# 读取csv文件df <- read.csv(file_path, header = TRUE)# 返回行数nrow(df)
}# 使用lapply函数调用get_row_count函数并返回行数向量
row_counts <- unlist(lapply(csv_files, get_row_count))
row_counts
# 打印每个文件的行数
cat("文件名\t行数\n")
for (i in seq_along(csv_files)) {cat(paste0(basename(csv_files[i]), "\t", row_counts[i], "\n"))
}# 找到最大的行数a
a <- max(row_counts)
a# 循环处理每个.csv文件
for (file in csv_files) {# 读取数据temp_data <- read.csv(file, header = FALSE)# 获取第一列的行数n_rows <- nrow(temp_data)# 创建长度为1065的向量,填充为-1new_col <- rep(-1, a)# 将读取的数据填充到新的向量中if (n_rows >= a) {new_col <- temp_data[1:a, 1]} else {new_col[1:n_rows] <- temp_data[, 1]}# 将新向量转换为数据框,并写入新的.csv文件中new_data <- data.frame(new_col)write.csv(new_data, file = paste0(file, "_processed.csv"), row.names = FALSE)
}# 指定文件夹路径和要读取的csv文件列表
csv_files <- list.files(folder_path, pattern = "*.csv", full.names = TRUE)
csv_files# 读取所有csv文件并将它们合并到一个数据框中
data_list <- lapply(csv_files, function(x) read_csv(x, show_col_types = FALSE))
data_list
merged_data <- bind_cols(data_list)# 重命名列名
colnames(merged_data) <- gsub(".csv", "", basename(csv_files))# 保存合并后的数据框为.csv文件
write_csv(merged_data, "merge.csv")write.xlsx(merged_data, "merge.xlsx")

R语言处理表格数据(一)相关推荐

  1. r语言 将表格导出为csv_如何将R语言中表格数据输出为Excel文件.pdf

    如何将R 语言中的表格数据输出为Excel 文件 熊荣川 六盘水师范学院生物信息学实验室 xiongrongchuan@126.com /u/Bearjazz 平台的开放性使得R 语言具有了丰富的运算 ...

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

    目录 1. 修改excel表格列名,并合并所有excel 2. 分组计算(group) 3. 文件格式转换(txt to xlsx) 4. 数据合并,添加新列 5. 遍历文件夹并对每个xlsx文件进行 ...

  3. R语言处理缺失数据的5个常用包

    R语言处理缺失数据的5个常用包 1.常用缺失数据处理包 2. MICE 包 2.1基本介绍 2.2 实例展示 3.Amelia包 3.1基本介绍 3.2实例展示 4.missForest包 4.1基本 ...

  4. r语言中进行数据可视化_R中的数据可视化

    r语言中进行数据可视化 R programming was developed in 1993 for making graphs and producing statistical results. ...

  5. R语言把dataframe数据转化为tibble格式、查看每个数据列的缺失值个数、使用数据列的均值对数据列的缺失值进行填充

    R语言把dataframe数据转化为tibble格式.查看每个数据列的缺失值个数.使用数据列的均值对数据列的缺失值进行填充 目录

  6. R语言进行dataframe数据内连接(Inner join):使用R原生方法、data.table、dplyr等方案

    R语言进行dataframe数据内连接(Inner join):使用R原生方法.data.table.dplyr等方案 目录 R语言进行dataframe数据内连接(Inner join):使用R原生 ...

  7. R语言可视化dataframe数据、并自定义设置坐标轴各个标签使用不同的色彩

    R语言可视化dataframe数据.并自定义设置坐标轴各个标签使用不同的色彩 目录 R语言可视化dataframe数据.并自定义设置坐标轴各个标签使用不同的色彩

  8. R语言ggplot2可视化数据点注释、标签显示不全、发生边界截断问题解决实战

    R语言ggplot2可视化数据点注释.标签显示不全.发生边界截断问题解决实战 目录 R语言ggplot2

  9. R语言进行dataframe数据左连接(Left join):使用R原生方法、data.table、dplyr等方案

    R语言进行dataframe数据左连接(Left join):使用R原生方法.data.table.dplyr等方案 目录 R语言进行dataframe数据左连接(Left join):使用R原生方法 ...

最新文章

  1. 沙盘正在注销进程start_进程,线程,多线程
  2. win10红警2黑屏_win10系统如何通过U盘安装系统呢?
  3. OpenCV移植各向异性图像分割间隙流体的实例(附完整代码)
  4. C#】通过遍历IFrame访问页面元素
  5. 用Scrutor来简化ASP.NET Core的DI注册
  6. mysql 存储过程 插入记录_mysql 存储过程 插入记录
  7. 如何查看SharePoint Server的版本信息
  8. 防御ddos攻击的免费防火墙
  9. CAN开发 入门知识总结
  10. mysql cluster部署_mysql cluster部署
  11. 电子商务网站-数据库设计
  12. 3626 三元一次方程(枚举)
  13. 计算机新教师汇报课报道,提升专业促成长—开元路小学开展新教师汇报课记实...
  14. 数据结构(C语言版)——顺序栈(代码版)
  15. MT6701磁编码器使用指南,14Bit单圈绝对值,I2C stm32 HAL库读角度,兼容AS5600
  16. flowable 监听器
  17. fdasfasfasfsafsadfadgggdddddddddddddddddfdssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
  18. 使用JTAG的工具Jflash刷写S32DS生成的HEX文件
  19. iphone ipad5.1.1越狱 越狱
  20. DDD学习资料(持续更新)

热门文章

  1. 人工智能方向 - 贾扬清 - 阅读摘要
  2. 上海外来常住人口15年来首现负增长 同比降1.5%
  3. Java实现BST:搜索二叉树
  4. slam2:kf,pf
  5. 解决Android 7.0及以上版本文件暴露异常exposed beyond app through Intent.getData()的方法
  6. 信号完整性(SI)电源完整性(PI)学习笔记(二十九)电源分配网路(一)
  7. USE启动盘制作linux服务器/桌面系统搭建(Universal USB Installer)
  8. 编译内核模块生成ko驱动文件
  9. 幸福是目的,成功是手段
  10. zoom视频会议官网_人性化视频会议的空间(Zoom等)