繁体   English   中英

R:如何使用rbind在数据表上保留行名

[英]R: How to keep row names with rbind on a data table

我丢失了数据的行名。 当在数据表上使用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

应该如何修改代码以保留行名?

根据注释和下面的参考中的信息,数据表不存储行名,因此行名不应与数据表一起使用。 如果行名包含所需的标识信息,则应将该信息移到数据表中的其他列中。

引用Package'data.table'的第7页,2014年12月22日修订 ,引用

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.

其中“ it”指的是data.table对象,文本经过重新格式化以适合此处的水平空间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM