使用制表符分隔符将.txt文件读入R,并且每列均以非数值开头

时间:2019-05-09 00:50:32

标签: r

我有一个唯一的文本文件,其中非数字短语作为列标题,制表符分隔的数字矢量作为每个向量中的值,但是非数字标题与每个向量中的最终数值相邻。下面的示例(text_file)类似于此的简单版本。该文件另存为“ txt”文件,我想将其转换为R格式的矩阵或data.frame格式(示例提供了所需的格式)。有谁知道如何做到这一点?

我已经尝试了多种方法,但不确定如何处理

text_file <- 'cat .210 -.123 .456dog 1.22 2.32 3.33\'\'\ 4.11 .021 .000'
#then, assume that is saved as a '.txt' file in directory
data <- read.table ('text_file.txt')

#desired output looks like so#
what_data_should_resemble = as.data.frame(matrix( c(.210, -.123, .456, 1.22, 2.32, 3.33, 4.11, .021, .000), 
                             nrow=3,              
                             ncol=3,              
                             byrow = TRUE))
colnames(what_data_should_resemble) <- c('cat', 'dog', '')
what_data_should_resemble

1 个答案:

答案 0 :(得分:2)

您可以使用readLines()读取数据,然后用新行替换列名,然后使用read.table()再次读取。

text_to_read <- 'cat .210 -.123 .456dog 1.22 2.32 3.33\'\'\ 4.11 .021 .000'

text <- readLines(textConnection(text_to_read))

read.table(text=gsub("cat|dog|''", "\n", text), col.names = c("cat", "dog", "x"))

   cat    dog     x
1 0.21 -0.123 0.456
2 1.22  2.320 3.330
3 4.11  0.021 0.000

@thelatemail指出,您可以使用regex对其进行抽象处理,以处理任意数量的列。

read.table(text=gsub("[^\\d.\\-\\s]+", "\n", text, perl = TRUE))