2013-10-22 47 views
0

我用this answer的代碼把我的列車數據分成兩組。如何拆分一列data.frame並獲取data.frame作爲輸出?

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?

+1

在您的子集行中放置drop = FALSE。 – Thomas

回答

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 = TRUE R將試圖強迫結果在可能的最低尺寸,在這種情況下的原子向量,因爲只有一個單一的柱。

0

很顯然,我喜歡@ SimonO101的答案,但我想我要補充一點,人們也可以使用split功能在這裏:

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

其結果將是兩個dataframes的列表:

> 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[中的默認值,但drop=FALSEsplit中的默認值。

相關問題