热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

R语言选择导入文本数据部分字段

背景:文本数据字段太多,只需要读取有用字段,以此降低内存压力方便分析参考:OnlyreadlimitednumberofcolumnsinR方法一:read.table

背景:文本数据字段太多,只需要读取有用字段,以此降低内存压力方便分析

参考:Only read limited number of columns in R


方法一:read.table、read.csv

       直接使用自带函数设定适当的参数(colClasses),该参数需要指定每列数据的类型(可以使用nrows参数读取几行查看class),不需要的列指定为NULL即可。如下:

dat <- structure(list(Year = 2009:2011, Jan = c(-41L, -41L, -21L), 
Feb = c(-27L, -27L, -27L), Mar = c(-25L, -25L, -2L),
Apr = c(-31L, -31L, -6L), May = c(-31L, -31L, -10L),
Jun = c(-39L, -39L, -32L), Jul = c(-25L, -25L, -13L),
Aug = c(-15L, -15L, -12L), Sep = c(-30L, -30L, -27L),
Oct = c(-27L, -27L, -30L), Nov = c(-21L, -21L, -38L),
Dec = c(-25L, -25L, -29L)),
.Names = c("Year", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
class = "data.frame",
row.names = c(NA, -3L))
write.table(dat, "test.txt", row.names=FALSE)

## 查看每个列的class
df <- read.table("test.txt", nrow=2, header = TRUE)
apply(df, 2, class)
# Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer" "integer"

df <- read.table("test.txt",
colClasses = c(rep("integer", 7), rep("NULL", 6)),
header = TRUE)
# > df
# Year Jan Feb Mar Apr May Jun
# 1 2009 -41 -27 -25 -31 -31 -39
# 2 2010 -41 -27 -25 -31 -31 -39
# 3 2011 -21 -27 -2 -6 -10 -32

write.csv(dat, "test.csv", row.names=FALSE)
df <- read.csv("test.csv",
colClasses = c(rep("integer", 7), rep("NULL", 6)),
header = TRUE)
# > df
# Year Jan Feb Mar Apr May Jun
# 1 2009 -41 -27 -25 -31 -31 -39
# 2 2010 -41 -27 -25 -31 -31 -39
# 3 2011 -21 -27 -2 -6 -10 -32


方法二:使用package:colbycol

colbycol

没有安装成功,好像也不怎么支持了

 

方法三:使用package数据库功能辅助(RJDBC)

实际就是用Java来解决这个问题,太复杂没有去实现

library(RJDBC)
write.table(x=mtcars, file="mtcars.csv", sep=",", row.names=F, col.names=T)

path.to.jdbc.driver <- "jdbc//csvjdbc-1.0-18.jar"
drv <- JDBC("org.relique.jdbc.csv.CsvDriver", path.to.jdbc.driver)
conn <- dbConnect(drv, sprintf("jdbc:relique:csv:%s", getwd()))

head(dbGetQuery(conn, "select * from mtcars"), 3)
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1 21 6 160 110 3.9 2.62 16.46 0 1 4 4
# 2 21 6 160 110 3.9 2.875 17.02 0 1 4 4
# 3 22.8 4 108 93 3.85 2.32 18.61 1 1 4 1

head(dbGetQuery(conn, "select mpg, gear from mtcars"), 3)


方法四:借助linux工具命令实现

快速,方便;需要熟悉awk,cut的语法

cut功能比较单一适合处理分割整齐的数据,而awk的功能更加强大(awk使用1,awk使用2

dat <- structure(list(Year = 2009:2011, Jan = c(-41L, -41L, -21L), 
Feb = c(-27L, -27L, -27L), Mar = c(-25L, -25L, -2L),
Apr = c(-31L, -31L, -6L), May = c(-31L, -31L, -10L),
Jun = c(-39L, -39L, -32L), Jul = c(-25L, -25L, -13L),
Aug = c(-15L, -15L, -12L), Sep = c(-30L, -30L, -27L),
Oct = c(-27L, -27L, -30L), Nov = c(-21L, -21L, -38L),
Dec = c(-25L, -25L, -29L)),
.Names = c("Year", "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
class = "data.frame",
row.names = c(NA, -3L))
# 使用制表符分割
write.table(dat, "test.txt", row.names=FALSE, sep = "\t")
df <- read.table(pipe("cut -f 1,5 test.txt"), header=TRUE)
df
system("cut -f 1,5 test.txt")
# Year Apr
# 1 2009 -31
# 2 2010 -31
# 3 2011 -6

# 使用空格分割
write.table(dat, "test.txt", row.names=FALSE, sep = " ")
df <- read.table(pipe("cut -d ' ' -f 1,5 test.txt"), header=TRUE)
df
system("cut -d ' ' -f 1,5 test.txt")
# Year Apr
# 1 2009 -31
# 2 2010 -31
# 3 2011 -6

总结

(1)数据量不是很大且对数据内容了解时,可以使用read.table指定合理的参数colClasses读取。

(2)数据较大且要求速度建议借助linux下的数据处理工具


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • Java第四周作业:条件语句实践与分析
    本次作业主要围绕Java编程中的if语句展开,通过具体案例深入理解选择结构的使用方法。学生需要完成多个编程任务,并在博客中详细记录每道题目的题目、代码及运行结果。 ... [详细]
  • 数组元素逆序排列的实现
    本文介绍了一种简单有效的方法,用于将整数数组中的元素进行逆序排列。通过折半交换对应位置的元素,可以高效地完成这一任务。 ... [详细]
author-avatar
kkq--_771
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有