R重复的rownames与原始数字+1

时间:2013-04-13 01:54:13

标签: r dataframe

问题是: 我在一些数据集上运行模拟和预测,基本上问题是当进行10k倍的交叉验证时,它会随机抽取10%的原始数据,但是当把结果放到一个完整的数据框中时,我会得到像合并它们时的额外1或2或..

我的例子很糟糕,所以我从其他帖子中借用它:rbind in R gives a weird rowname

 > tt1[2,]
         date  close emp pred
 2 1982-03-24 112.97  -1    1

 > tt2[2,]
         date  close emp pred
 2 1982-03-25 113.21   1    1

问题:

 > rbind(tt1[2,],tt2[2,])
          date  close emp pred
 2  1982-03-24 112.97  -1    1
 21 1982-03-25 113.21   1    1

我想要的是什么:

 > rbind(tt1[2,],tt2[2,])
          date  close emp pred
 2  1982-03-24 112.97  -1    1
 2  1982-03-25 113.21   1    1

任何帮助都会很棒,谢谢大家。

最佳, ķ

1 个答案:

答案 0 :(得分:2)

此示例使用最初发布的数据:

data_1 <- structure(list(ID = 1:3, GPA = c(3, 3.5, 4)), .Names = c("ID", 
"GPA"), class = "data.frame", row.names = c("1", "2", "3"))
data_2 <- structure(list(ID = 3:5, GPA = c(3.1, 3.2, 3.3)), .Names = c("ID", 
"GPA"), class = "data.frame", row.names = c("3", "4", "5"))

(忽略ID列与rowname一致的事实。)

您可以捕获原始行名称(如果需要,稍后再应用它们):

rbind(cbind(rn=rownames(data_1), data_1), cbind(rn=rownames(data_2), data_2))
##    rn ID GPA
## 1   1  1 3.0
## 2   2  2 3.5
## 3   3  3 4.0
## 31  3  3 3.1
## 4   4  4 3.2
## 5   5  5 3.3

这可以通过几种方式参数化。这是一个:

d <- list(data_1, data_2)
do.call(rbind, lapply(d, function(x) cbind(rn=rownames(x), x)))
##    rn ID GPA
## 1   1  1 3.0
## 2   2  2 3.5
## 3   3  3 4.0
## 31  3  3 3.1
## 4   4  4 3.2
## 5   5  5 3.3