在 R [重复] 读取的数据文件中分配列名

Posted

技术标签:

【中文标题】在 R [重复] 读取的数据文件中分配列名【英文标题】:Assigning column names in a data file read by R [duplicate] 【发布时间】:2016-12-07 06:07:45 【问题描述】:

我正在尝试在 R 中读取网络数据(ID 图)。该文件名为“network.txt”,数据如下:

4 0
5 0
6 0
7 0
8 0
9 0
4029 1
4030 1
4031 1
4032 1
4033 1
19088 9040
19089 9040
19090 9040
19091 9040
19092 9040
19093 9040
19094 9040
19095 9040
19096 9040
19097 9040

而且,我正在使用 read.table() 模块阅读它。

data = read.table("network.txt",sep="\t",header=FALSE)
colnames( data ) <- unlist(c('to', 'from'))

Error in `colnames<-`(`*tmp*`, value = c("to", "from")) : 
  'names' attribute [2] must be the same length as the vector [1]

那么,如何分配列名?读取原始数据文件有错误吗?

【问题讨论】:

鉴于错误,我怀疑您的数据未正确读取。检查str(data)。很可能您只需要取出sep 参数,它就可以工作。 @ProcrastinatusMaximus 我会在重复标记之前阅读问题和答案。我认为链接的帖子无法解决问题中的问题,除非您发现它隐藏在链接中的某个地方。 【参考方案1】:

您可以在read.table 函数调用中提供列名,如下所示:

read.table("network.txt", col.names = c("Col1", "Col2"))

或者,您也可以通过与 names 函数的尝试类似的方式执行此操作:

test1 <- read.table("Question1.txt")
names(test1) <- c("col1", "col2")

【讨论】:

【参考方案2】:

我们只需要

colnames( data ) <- c('to', 'from')

因为c('to', 'from') 返回一个vectorunlist 在这里什么也不做。 unlist 用于输出为list 或(data.frame 这也是list 的元素等于length aka columns)的情况


关于错误,可能是我们使用了错误的sep,导致单个列可以通过检查str(data) 来识别。我会使用sep=""


除了以上推荐,我们还可以在read.table中指定col.names

data <- read.table("network.txt",sep="",header=FALSE, col.names = c("to", "from"))

或者使用data.table中的fread(它会自动选择分隔符)

library(data.table)
data <- fread("network.txt", header=FALSE, col.names = c("to", "from"))

【讨论】:

谢谢@akrun,我是 R 的初学者。而且,我认为从使用真实数据开始是一个好主意。现在效果很好。

以上是关于在 R [重复] 读取的数据文件中分配列名的主要内容,如果未能解决你的问题,请参考以下文章

R 无法在 ff 过程中分配内存。怎么会?

读取超大文件 R 的列名和列值

将文件加载为字节数组,而不在内存中分配它 C#

在解构中分配选项[重复]

在 Ruby 中分配内存失败(No MemoryError)?

如何在 R 中读取具有重复列的羽毛文件