我使用this answer中的代码将我的火车数据分成两组。
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 ...
然后我希望像原始数据(trainLabels
)一样拥有data.frame。
如何获取data.frame?
答案 0 :(得分: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将尝试将结果强制转换为可能的最低维度,在本例中为原子向量,因为只有一列。
答案 1 :(得分: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
是[
中的默认值,但drop=FALSE
是split
中的默认值。