R:不包括一列的随机样本列

时间:2015-01-02 17:25:49

标签: r sample

我可能已经发现了之前发布的代码中的一个问题,“R:在randomForest()调用中使用带有sample()过程的foreach()”并且它与我用来绘制随机子样本的脚本相关数据框中的列。 假数据(下面)有19列,“A”到“S”,我想绘制5列的随机子集,但我想从绘图中排除第三列“C”。简单地从sample()调用的第一个参数中排除第三列不起作用(即,一些样本包含'C'列)。我希望有人建议如何做到这一点。这是不起作用的脚本:

randsCOLs= sample(1:dim(FAKEinput[,c(1:2,4:19)])[2], 5, replace=FALSE) 
#randsCOLs= sample(dim(FAKEinput[,c(1:2,4:19)])[2], 5, replace=FALSE) - also doesn't work
out <- FAKEinput[,randsCOLs]

FAKEinput <- 
data.frame(A=sample(25:75,20, replace=T), B=sample(1:2,20,replace=T), C=as.factor(sample(0:1,20,replace=T,prob=c(0.3,0.7))),
    D=sample(200:350,20,replace=T), E=sample(2300:2500,20,replace=T), F=sample(92000:105000,20,replace=T),
    G=sample(280:475,20,replace=T),H=sample(470:550,20,replace=T),I=sample(2537:2723,20,replace=T),
    J=sample(2984:4199,20,replace=T),K=sample(222:301,20,replace=T),L=sample(28:53,20,replace=T),
    M=sample(3:9,20,replace=T),N=sample(0:2,20,replace=T),O=sample(0:5,20,replace=T),P=sample(0:2,20,replace=T),
    Q=sample(0:2,20,replace=T), R=sample(0:2,20,replace=T), S=sample(0:7,20,replace=T))

2 个答案:

答案 0 :(得分:3)

如果我没有弄错的话,看起来排除dim()通话就行了。

randsCOLs = sample(FAKEinput[-3], 5, replace=FALSE) 

答案 1 :(得分:1)

以下是一种更通用的方法(如果C列不是3rd列)

FAKEinput[sample(which(names(FAKEinput) !='C'),5, replace=FALSE)]

或者您可以使用setdiff

FAKEinput[sample(setdiff(names(FAKEinput),'C'), 5, replace=FALSE)]

或者更改OP的1:dim代码并假设C是列3

FAKEinput[sample((1:dim(FAKEinput)[2])[-3], 5, replace=FALSE)]