2013-11-21 2 views
1

Я хочу прочитать текстовый файл в R, но у меня возникла проблема с тем, что первый столбец смешивается с именами столбцов и номерами первых столбцов.Read.table в R

текст данных файла

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 = "")

Выход:

        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. И так далее.

+0

Вы имеете в виду, что ваши столбцы являются строками и наоборот? –

+0

Вы говорите, что для некоторых есть разделитель пространства, а не другие? например строка №2. – Maiasaura

ответ

1

Это по той же линии мышления как @ Двине, но приходится для отрицательных значений во втором ряду.

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

Поскольку у вас нет запятых btwn в rownames и значения, которые необходимо добавить их обратно в:

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 

десятичные дроби не может печатать, но они есть.

0

Вы хотите аргумент row.names от read.table. Тогда вы можете просто перенести ваши данные:

data.predicted_values = read.table("predicted_values.txt", sep=",", row.names=1) 
data.predicted_values <- t(data.predicted_values) 
+0

Я пробовал оба метода, но это не сработало. Я хочу разделить имена строк и числовые данные на два отдельных столбца. – user3015546

+0

Вам нужно использовать 'sub', как в моем примере. –

+0

А я думал, что числовые значения были чисто, потому что вы не сказали ему использовать первый столбец как 'row.names' –

Смежные вопросы