楼主: Xinght
26290 22

[问答] 如何用R读取多个文件中指定列的数据并存入同一文件中 [推广有奖]

11
jmpamao 发表于 2014-3-17 21:59:50

看你搞矩阵,貌似行相同,
可以直接合并列

接楼上的, do.call(cbind,lapply(filenames,read.file))

12
yywan0913 在职认证  发表于 2014-3-18 09:12:33
Xinght 发表于 2014-3-17 19:16
谢谢,这个问题解决了。
rm(list=ls())
SimFiles
  1. library(data.table)
  2. FileNames<-read.table(file = "apsimoutfiles.TXT",header=TRUE, dec = ".")
  3. fn=FileNames[,1]  #f为所有文件名
  4. DT=data.table()
  5. DT=DT[,sapply(1:10000,function(i) {F=fread(fn[i],sep="\t",header=T);F$SimScinariosNames})]   #均取SimScinariosNames这一列
  6. write.table(DT,file="C:/Test/NSimData.txt",sep=",",quote=F)
复制代码
加入一万个文件所取的列均的集合数都一样的话,可以这样,否则有点麻烦点。。
你把代码写在<>中,否则很多格式消失了
是什么给了你自信

13
Xinght 发表于 2014-3-18 10:15:48
yywan0913 发表于 2014-3-18 09:12
加入一万个文件所取的列均的集合数都一样的话,可以这样,否则有点麻烦点。。
你把代码写在中,否则很多 ...
谢谢

14
Xinght 发表于 2014-3-18 10:16:34
jmpamao 发表于 2014-3-17 21:59
看你搞矩阵,貌似行相同,
可以直接合并列
谢谢

15
Xinght 发表于 2014-3-21 19:46:59
淘宝网橙迷橙橙 发表于 2014-3-17 21:45
如是txt数据文件,将多个文件读入列表,剩下的,你看着办。
fileName
谢谢。
我用你的方法可以将所有的文件整合到一起,却不能仅将指定的某一列放在一个文件中。我也没有想出其他办法解决该问题,所以还请指导
并且还想将文件名作为新生成文件中列的名字
谢谢

16
Xinght 发表于 2014-3-24 06:41:09
Xinght 发表于 2014-3-21 19:46
谢谢。
我用你的方法可以将所有的文件整合到一起,却不能仅将指定的某一列放在一个文件中。我也没有想出 ...
DryT0ST0HT0N300SF50TF125FF125.txt (108.45 KB) DryT0ST0HT0N200SF50TF75FF75.txt (108.45 KB) DryT0ST0HT0N125SF25TF100FF0.txt (108.45 KB) DryT0ST0HT0N50SF50TF0FF0.txt (108.45 KB)

17
jmpamao 发表于 2014-3-27 21:42:53
###我把你私信的问题 发到这里####让大家一起想想吧####
Xinght   9 小时前
谢谢,我可能没有说清楚,假如我有10000个文件,每个文件中的变量数是一样的,然后我从这10000个文件中将相同的变量提出来,比如Xyield,然后将它们都放在一个文件中,然后每列的名字就是这10000个文件的名字。
例如
在名为Xyield的文件中的格式如下
DryT0ST0HT0N0SF0TF0FF0 DryT0ST0HT0N100SF25TF75FF0 DryT0ST0HT0N125SF25TF100FF0……
也就是说我首先要在这10000文件中的Xyield数据提取出来,然后将它们放进一个文件中,同时每列的名字就是这列数据被提取出来所在文件的名字。
谢谢帮助
#############################################################

18
jmpamao 发表于 2014-3-27 22:28:39
试了下简单的文件
  1. dir=dir("f:/xinght")
  2. filenames=paste("f:/xinght/",dir,sep="")
  3. ###提取其中一个文件的列名
  4. data_i=read.table(file="f:/xinght/dat1.txt",header=T,sep=",")
  5. col=colnames(data_i)
  6. ##########
  7. colname=unlist(strsplit(dir,".txt"))

  8. for(i in col){  
  9. dat<-do.call(cbind,lapply(filenames,function(x)read.table(x,header=T,sep=",")[i]))
  10. colnames(dat)<-colname
  11. write.csv(dat,file=paste("f:/xing/",i,".csv",sep=""),row.names=F)         
  12. }
复制代码


##你的文件读取时 要read.table(x,skip=2,header=T )[-1,])
##如果你的文件有10000时,不知速度如何?

19
2010携手天涯 发表于 2014-3-30 10:17:41
jmpamao 发表于 2014-3-27 22:28
试了下简单的文件

##你的文件读取时 要read.table(x,skip=2,header=T )[-1,])
lapply(filenames,function(x)read.table(x,header=T,sep=",")),运行会出错。

20
2010携手天涯 发表于 2014-3-30 10:38:00
jmpamao 发表于 2014-3-27 22:28
试了下简单的文件

##你的文件读取时 要read.table(x,skip=2,header=T )[-1,])
解决了,不好意思呀。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 12:34