Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将多个单列文本文件(可变长度)读入文件名为列标题的数据帧

将多个单列文本文件(可变长度)读入文件名为列标题的数据帧
EN

Stack Overflow用户
提问于 2017-02-09 05:39:28
回答 2查看 903关注 0票数 1

我有许多(600+)文本文件,每个文本文件只包含一列数据,我希望将这些数据读入R中的数据框架中。问题是,我需要将每个文件中的值作为一个单独的列导入,并且每个文件中的值数量并不相等。文本文件都以标题“Area”开头,这是我不需要的(我正在尝试将文件名设置为标题),然后继续使用一列数字(4000 - 10000值)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Area
0.0034556
0.0002345
....

我最接近的是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filenames <-dir()
n <- length(filenames)
for (i in 1:n) {data[i] <- read.csv(filenames[i]}
## printing data at this point gives lists for each value of i

然后,我尝试将包含列表的值重新绑定到文件名,以便将其用作单独的列(在变量c下),然后我希望将各个列拼凑到一个dataframe中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (i in 1:n) {c[i] <- rbind(filenames[i], data[i])}

当c被打印时,这似乎给出了一个包含两个元素的列表--最后一个文件的名称和它包含的值的数量。

我担心,即使我可以将用read.csv导入的列表绑定到列标题,我仍然无法将其合并到一个数据文件中,因为不同文件之间的值数目不同。我已经看到了将多个文本文件的值合并到一个列中的可能解决方案(并且已经做到了这一点),但是无法找到解决这个问题的解决方案,因为每个导入的文件都需要自己的列在线或漩涡。

如有任何帮助,我将不胜感激!安格斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-09 06:28:40

由于数据量大,我建议使用data.table

步骤1:读取一个data.table中的所有文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(data.table)
filenames <-dir()
dt_long <- rbindlist(setNames(lapply(filenames, fread), filenames), idcol = TRUE)
dtl
#         .id      Area
#1: file1.csv 0.0034556
#2: file1.csv 0.0002345
#3: file2.csv 0.0034556
#4: file2.csv 0.0002345
#5: file2.csv 0.0034556
#6: file2.csv 0.0002345
#7: file2.csv 0.0034556
#8: file2.csv 0.0002345

fread读取lapply调用中的每个文件。lapply是文件名上的一种隐含的for循环,并返回一个列表,其中每个list元素包含一个包含一个文件内容的data.table

setNames用于用相应的文件名重命名每个list元素。

最后,rbindlist将列表中的单个data.tables组合成一个大型data.table。每一行的起源由.id col标识。

步骤2:将格式重塑为宽格式

通常,我更喜欢使用长格式的数据,因为我可以使用分组函数(例如,by = .id中的data.table语法)来同时影响所有文件的数据。

但是,如果您坚持为每个文件设置一个单独的列,则可以将其从宽格式改为长格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dt_wide <- dcast(dt_long, rowid(.id) ~ .id, value.var = "Area")
dt_wide
#   .id file1.csv file2.csv
#1:   1 0.0034556 0.0034556
#2:   2 0.0002345 0.0002345
#3:   3        NA 0.0034556
#4:   4        NA 0.0002345
#5:   5        NA 0.0034556
#6:   6        NA 0.0002345

请注意,由于文件大小不同而导致的缺失值已由NA填充。

数据

为了获得一个可重复的示例,我创建了两个虚拟数据文件。

file1.csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Area
0.0034556
0.0002345

file2.csv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Area
0.0034556
0.0002345
0.0034556
0.0002345
0.0034556
0.0002345
票数 2
EN

Stack Overflow用户

发布于 2017-02-09 06:13:21

也许最简单的方法就是把所有的东西都列在一张清单上。在函数read.csv中,可以立即用col.names定义列名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
filenames <-dir()
n <- length(filenames)
data <- list()
for (i in 1:n) {data[[i]] <- read.csv(filenames[i], col.names = filenames[i])}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42138252

复制
相关文章
如何同时从多个文本文件读取数据
在很多时候,需要对多个文件进行同样的或者相似的处理。例如,你可能会从多个文件中选择数据子集,根据多个文件计算像总计和平均值这样的统计量。当文件数量增加时,手动处理文件的可能性会减小,出错的概率会增加。
TalkPython
2019/05/24
3.9K0
IP协议的数据帧长度是多少
1、如果使用PPP协议,帧最大长度1510字节,其中数据长度(加载上层的协议数据)不超过1500字节; 2、如果在以太网中,帧的长度为:64~1518字节(10~100Mbps 的以太网),1G及以上的以太网,帧长度为512~1518字节;其中数据长度(加载上层的协议数据)不超过1500字节。
葆宁
2019/04/18
3.7K0
Power Query中单列数据按需转多列
先上效果图 (一) 确定数据源及变量 1. 确定需求: a) 通过列数参数来改变最终的列数 b) 更改列数标题不影响数据运行 c) 更改数据源标题不影响数据运行 2. 确定变量 a) 列数 b) 列数
逍遥之
2020/03/23
2.6K0
pandas dataframe 新增单列和多列
dataframe assign方法,返回一个新对象(副本),不影响旧dataframe对象
lovelife110
2021/01/14
4.3K0
Pandas 修改单列,多列,Dataframe 数据类型方法汇总
文章目录 1.修改单列的数据类型 2.修改指定多列的数据类型 3.创建dataframe时,修改数据类型 4.读取时,修改数据类型 5.自动 1.修改单列的数据类型 import pandas as pd import numpy as np df = pd.read_csv('test.csv') df['column_name'] = df['column_name'].astype(np.str) print(df.dtypes) 2.修改指定多列的数据类型 import pandas as
白墨石
2021/01/13
6.7K0
多个单列索引和联合索引的区别详解
背景: 为了提高数据库效率,建索引是家常便饭;那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下。
全栈程序员站长
2022/09/05
1.4K0
pandas 入门2 :读取txt文件以及描述性分析
本文主要会涉及到:读取txt文件,导出txt文件,选取top/bottom记录,描述性分析以及数据分组排序;
万能数据的小草
2020/02/10
2.8K0
protobuf可变长度原理
这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章【golang-protobuf使用】
潇洒哥和黑大帅
2018/12/24
1.6K0
ElasticSearch实战:将文本文件导入kibana
前文写过,如何将linux日志导入到kibana----《ElasticSearch实战:Linux日志对接Kibana》,本文主要解决另一个问题:如何将非格式化的文本文件(如TXT等)导入到kibana中。
BH8ANK
2019/03/13
5.4K0
ElasticSearch实战:将文本文件导入kibana
【BIGDATA】将普通文本文件导入ElasticSearch
1,首先,ElasticSearch只能接收格式化的数据,所以,我们需要将文本文件转换为格式化的数据---json。
BH8ANK
2021/01/29
2K0
SQL 将多列的数据转到一列
如题。假设我们要把 emp 表中的 ename、job 和 sal 字段的值整合到一列中,每个员工的数据(按照 ename -> job -> sal 的顺序展示)是紧挨在一块,员工之间使用空行隔开。
白日梦想家
2020/09/08
5.5K0
pdbsplit将多个chain的pdb文件分割
因此我们将2H8L分割成三个pdb文件。 [1] "split_chain/2H8L_A.pdb" "split_chain/2H8L_B.pdb" "split_chain/2H8L_C.pdb"
用户1359560
2020/09/07
1.6K0
Python pandas依列拆分为多个Excel文件
问题:Python pandas依列拆分为多个Excel文件 实例:下面成绩表中按“班别”拆分为多个工作簿,一个班一个文件 ====代码==== import pandas as pd data = pd.read_excel("D:\yhd_python\yhd-python依列拆分Excel\汇总.xlsx") rows = data.shape[0] #获取行数 shape[1]获取列数 print(rows) data["身份证"]=[" %i"%i for i in data["身份证"]]
哆哆Excel
2022/10/25
1.5K0
Python pandas依列拆分为多个Excel文件
Python pandas按列拆分Excel为多个文件
还是用循环数据的方法来进行逐行判断并进行组合,再拆分。总是感觉与VBA的差别不大,Python的强大功能没能体现出来。今天终于学习到了。
哆哆Excel
2022/10/25
3.2K0
Python pandas按列拆分Excel为多个文件
把Excel文件中的数据读入到DataGrid中
作者Blog:http://blog.csdn.net/net_lover/使用Excel文件做为DC#
Java架构师必看
2020/10/16
1.2K0
Excel公式技巧:基于单列中的多个条件求和
基于列中的条件求和通常使用SUMIF函数或者SUMIFS函数,特别是涉及到多条件求和时。然而,随着条件的增多,公式将会变得很长,难以理解。而使用SUMPRODUCT函数,可以判断同一列中的多个条件且公式简洁。
fanjy
2022/11/16
5K0
Excel公式技巧:基于单列中的多个条件求和
如何使用Excel将某几列有值的标题显示到新列中
如果我们有好几列有内容,而我们希望在新列中将有内容的列的标题显示出来,那么我们怎么做呢?
繁华是客
2023/03/03
11.4K0
单列文本拆分为多列,Python可以自动化
在Excel中,我们经常会遇到要将文本拆分。Excel中的文本拆分为列,可以使用公式、“分列”功能或Power Query来实现。
fanjy
2022/04/13
7.1K0
单列文本拆分为多列,Python可以自动化
ExcelVBA由标题组和所在列数据为dic的key
我们在多条件求和时,由于条件不定,想组和条件为dic 的key,我想达到的目的是,任意输入标题,查找到标题所在列,再循环数据,把所在的列组合为dic 的 key ,再进行求和或计数,
哆哆Excel
2022/10/31
5510
点击加载更多

相似问题

PySpark将文本文件读入单列数据帧

10

将文本文件读入具有可变列的字典

24

将多个文件读入dask数据帧

17

将多个文件读入多个数据帧

20

将多个文件读入单独的数据帧

116
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文