2015-01-02 3 views
0

Я теряю имена строк данных. Это происходит, когда функция rbind используется в таблице данных.R: Как сохранить имена строк с rbind в таблице данных

Вот пример, показывающий, что должно произойти

library(data.table) 
allData <- NULL 
for (itest in seq(3)) { 
    pts <- NULL 
    npts <- 4 
    for (ipt in seq(npts)) { 
    pp <- c(ipt, ipt*2, ipt^3) 
    pts <- rbind(pts,pp) 
    } 
    colnames(pts)<-c('A','B','C') 
    rownames(pts) <- paste('test',itest,seq(npts),sep='_') 
    # pts<-data.table(pts) 
    print(pts) 
    allData <- rbind(allData,pts) 
} 
print(allData) 

Выход

  A B C 
test_1_1 1 2 1 
test_1_2 2 4 8 
test_1_3 3 6 27 
test_1_4 4 8 64 
test_2_1 1 2 1 
test_2_2 2 4 8 
test_2_3 3 6 27 
test_2_4 4 8 64 
test_3_1 1 2 1 
test_3_2 2 4 8 
test_3_3 3 6 27 
test_3_4 4 8 64 

Когда таблица данных используется, имена строк теряются

library(data.table) 
allData <- NULL 
for (itest in seq(3)) { 
    pts <- NULL 
    npts <- 4 
    for (ipt in seq(npts)) { 
    pp <- c(ipt, ipt*2, ipt^3) 
    pts <- rbind(pts,pp) 
    } 
    colnames(pts)<-c('A','B','C') 
    pts<-data.table(pts) 
    rownames(pts) <- paste('test',itest,seq(npts),sep='_') 
    allData <- rbind(allData,pts) 
} 
print(allData) 

Выходные данные таблица

A B C 
1: 1 2 1 
2: 2 4 8 
3: 3 6 27 
4: 4 8 64 
5: 1 2 1 
6: 2 4 8 
7: 3 6 27 
8: 4 8 64 
9: 1 2 1 
10: 2 4 8 
11: 3 6 27 
12: 4 8 64 

Как изменить код для сохранения имен строк?

+0

В ответ на комментарий, который был удален. Использование data.table (pts, keep.rownames = TRUE) исправляет вопрос, как первоначально размещен в примере кода. Но это не устраняет проблему в фактическом коде. Я обновлю образец. –

+1

'data.table' объект не имеет периода' row.names'. Если вы хотите сохранить их, используйте предложение, упомянутое в комментариях. См. [Этот вопрос] (http://stackoverflow.com/questions/24199533/display-row-names-in-a-data-table-object) –

+0

Я бы создал новый столбец Test и сохранил имена строк в этом переменная. –

ответ

1

Основываясь на информации в комментариях и ниже, в таблицах данных не хранятся имена строк, поэтому имена строк не должны использоваться с таблицами данных. Если имя строки содержит необходимую идентифицирующую информацию, эта информация должна быть перемещена в дополнительный столбец (столбцы) в таблице данных.

Ссылка Страница 7 из Package ‘data.table’, revision December 22, 2014, цитирую

A data.table is a list of vectors, just like a data.frame. However : 
1. it never has rownames. Instead it may have one key of one or more columns. 
This key can be used for row indexing instead of rownames. 

, где «он» относится к data.table объекта, и текст был переформатирован, чтобы поместиться в горизонтальном пространстве здесь.