我丢失了数据的行名称。它似乎发生在数据表上使用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 :(得分:1)
根据注释中的信息和下面的参考,数据表不存储行名,因此行名不应与数据表一起使用。如果行名称包含所需的标识信息,则应将该信息移动到数据表中的其他列中。
Package ‘data.table’, revision December 22, 2014的第7页,引用
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对象,文本被重新格式化以适应这里的水平空间。