我有两个向量和一个数据框。我运行一个随机生成器,以获得用于训练的分割和测试模型。 (TRUE训练时为FALSE测试集),如果多次运行TRUE到FALSE的数量变化(FALSE范围从4到8)以及位置。这是一个例子,实际数据框要大得多。
x <- c(1,2,3,5,4,1,2,3,5,7,4,2,1,5,6,8,5,3,2,4,6,8,9,0,2)
y <- c(3,5,7,8,4,2,2,5,4,7,9,0,0,7,6,4,2,2,1,4,6,8,9,0,0)
X <- data.frame(x,y)
runif(nrow (X)) <= 0.75
[1] TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE FALSE TRUE
FALSE TRUE TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
我想找到一个函数或能够指示生成拆分TRUE和FALSE顺序生成所有名为FALSE的元素只在末尾找到而前一个元素应为TRUE。它应该产生符合下面例子的东西。
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
我已经找到了可以在没有运气的情况下做到这一点的函数,因为这个函数可以实现这一目的。在插入包中的createTimeSlices意味着模型中的重大更改很难实现。
另一方面,我有下面的表达式,我只在最后获得FALSE一次,而其余的是按预期随机的,但是我不能得到一个表达式,按顺序产生FALSE的数量只有在最后的位置才能找到,而在此之前产生TRUE,如上例所示。
S<- runif(nrow (X)) <= 0.75
S[length(S)] <- FALSE
while(S[length(S)] [!FALSE]) { S<-runif(nrow (X)) <= 0.75}
train<-print(S)
欢迎任何帮助
非常感谢
答案 0 :(得分:1)
也许我误解了,但你不能这样做
S <- runif(nrow(X)) <= 0.75
sort(S,decreasing = TRUE)
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[19] TRUE TRUE TRUE FALSE FALSE FALSE FALSE
为您提供(大约)75%TRUE
值,始终位于向量的前面。
看起来你真的想要前75%的行(基于你上面的评论)。在那种情况下,我会这样做:
crit <- floor(nrow(X) * 0.75)
train <- seq_len(nrow(X)) < crit
train
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE FALSE
[19] FALSE FALSE FALSE FALSE FALSE FALSE FALSE
答案 1 :(得分:1)
为什么不使用sample
?无论如何,你需要做的就是对你的布尔矢量进行排序:
基地R:
X$sample <- runif(nrow(X)) <= 0.75
X[order(X$sample, decreasing=TRUE), ]
使用dplyr
:
library(dplyr)
X %>%
mutate(sample = runif(nrow(X)) <= 0.75) %>%
arrange(desc(sample))