0

我使用此答案中的代码将我的火车数据分成两组。

trainLabels <- read.csv(trainLabels.file, stringsAsFactors=F, header=FALSE)

> str(trainLabels)
'data.frame':   1000 obs. of  1 variable:
 $ V1: int  1 0 0 1 0 1 0 1 1 0 ...

trainLabelsTrain <- trainLabels[train_ind, ]
trainLabelsTest <- trainLabels[-train_ind, ]

> str(trainLabelsTrain)
 int [1:750] 0 1 0 0 0 0 1 1 1 0 ...

然后我想要一个 data.frame 就像原始数据(trainLabels)一样。

我怎样才能得到一个data.frame?

4

2 回答 2

3

在子集中使用drop = FALSE命令...

# drop = TRUE by default in `[` subsetting...
df <- data.frame( a = 1:10 )
df[ c(1,3,5) , ]
#[1] 1 3 5

#  With drop = FALSE...
df[ c(1,3,5) , , drop = FALSE ]
#  a
#1 1
#3 3
#5 5

drop = TRUER 将尝试将结果强制到可能的最低维度时,在这种情况下是原子向量,因为只有一列。

于 2013-10-22T14:42:25.703 回答
0

显然我喜欢@SimonO101 的回答,但我只是想补充一点,split这里也可以使用该功能:

df <- data.frame(a = 1:10)
set.seed(1)
x <- rbinom(10,1,.5)
out <- split(df,x)

结果将是两个数据框的列表:

> str(out)
List of 2
 $ 0:'data.frame':      4 obs. of  1 variable:
  ..$ a: int [1:4] 1 2 5 10
 $ 1:'data.frame':      6 obs. of  1 variable:
  ..$ a: int [1:6] 3 4 6 7 8 9

这是因为drop=TRUE它是 in 中的默认值,[但却drop=FALSE是 中的默认值split

于 2013-10-22T16:27:32.060 回答