首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Read.table转化为R

Read.table转化为R
EN

Stack Overflow用户
提问于 2013-11-21 03:08:13
回答 3查看 214关注 0票数 1

我想将一个文本文件读入R中,但是我遇到了一个问题:第一列与列名和第一列编号混合在一起。

数据文本文件

代码语言:javascript
复制
revenues       4118000000.0, 4315000000.0, 4512000000.0, 4709000000.0, 4906000000.0, 5103000000.0
cost_of_revenue-1595852945.4985902, -1651829192.2662954, -1705945706.6237037, -1758202488.5708148, -1808599538.1076286, -1857136855.234145
gross_profit   2522147054.5014095, 2663170807.7337046, 2806054293.376296, 2950797511.429185, 3097400461.892371, 3245863144.765855

R代码: data.predicted_values = read.table("predicted_values.txt",sep=",")

输出:

代码语言:javascript
复制
                                  V1          V2          V3          V4          V5          V6
1        revenues       4118000000.0  4315000000  4512000000  4709000000  4906000000  5103000000
2 cost_of_revenue-1595852945.4985902 -1651829192 -1705945707 -1758202489 -1808599538 -1857136855
3  gross_profit   2522147054.5014095  2663170808  2806054293  2950797511  3097400462  3245863145

如何将第一列分为两部分?我的意思是我想要的第一栏V1是收入,cost_of_revenue,gross_profit。V2为4118000000.0,-1595852945.4985902,2522147054.5014095。以此类推。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-21 04:37:34

这与@DWin的思路是一样的,但是解释了第二行中的负值。

代码语言:javascript
复制
TEXT <- readLines("predicted_values.txt")
A <- gregexpr("[A-Za-z_]+", TEXT)
B <- read.table(text = regmatches(TEXT, A, invert = TRUE)[[1]], sep = ",")
C <- cbind(FirstCol = regmatches(TEXT, A)[[1]], B)
C
#          FirstCol          V1          V2          V3          V4          V5          V6
# 1        revenues  4118000000  4315000000  4512000000  4709000000  4906000000  5103000000
# 2 cost_of_revenue -1595852945 -1651829192 -1705945707 -1758202489 -1808599538 -1857136855
# 3    gross_profit  2522147055  2663170808  2806054293  2950797511  3097400462  3245863145
票数 1
EN

Stack Overflow用户

发布于 2013-11-21 03:27:10

由于您没有逗号btwn,所以需要将它们添加回行名和值:

代码语言:javascript
复制
txt <- "revenues       4118000000.0, 4315000000.0, 4512000000.0, 4709000000.0, 4906000000.0, 5103000000.0
cost_of_revenue-1595852945.4985902, -1651829192.2662954, -1705945706.6237037, -1758202488.5708148, -1808599538.1076286, -1857136855.234145
gross_profit   2522147054.5014095, 2663170807.7337046, 2806054293.376296, 2950797511.429185, 3097400461.892371, 3245863144.765855"

Lines <- readLines( textConnection(txt) ) 
  # replace textConnection(.)  with  `file = "predicted_values.txt"`
res <- read.csv( text=sub( "(^[[:alpha:][:punct:]]+)(\\s|-)" ,
                                               "\\1,", Lines) ,
          header=FALSE, row.names=1 )
res

小数可能不会打印,但它们就在那里。

票数 1
EN

Stack Overflow用户

发布于 2013-11-21 03:27:33

您需要row.namesread.table参数。然后,您可以简单地转换您的数据:

代码语言:javascript
复制
data.predicted_values = read.table("predicted_values.txt", sep=",", row.names=1)
data.predicted_values <- t(data.predicted_values)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20111684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档