0

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

我的例子很糟糕,所以我从另一篇文章中借用它:R 中的 rbind 给出了一个奇怪的行名

 > 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

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

最好的,K

4

1 回答 1

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(忽略列与行名一致的事实。)

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

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
于 2013-04-13T02:08:26.743 回答