这个问题看起来很简单,但我没有弄清楚它是如何在R中完成的。 我想根据其值的模式修改逻辑向量。有两个修改步骤:替换/修改逻辑向量中的值(模式匹配)
- 如果有一个由真值包围的FALSE,请将其切换为TRUE。
- 如果少于3个连续的TRUE值,将它们切换到FALSE。
其他一切都应该保持原样。这里有一个例子:
# input
x = c(FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE,
FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
# output
xo = c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE)
cbind(x,xo)
是
x xo
[1,] FALSE FALSE
[2,] TRUE FALSE
[3,] FALSE FALSE
[4,] FALSE FALSE
[5,] TRUE FALSE
[6,] TRUE FALSE
[7,] FALSE FALSE
[8,] FALSE FALSE
[9,] TRUE TRUE
[10,] TRUE TRUE
[11,] TRUE TRUE
[12,] FALSE TRUE
[13,] TRUE TRUE
[14,] TRUE TRUE
[15,] FALSE FALSE
[16,] FALSE FALSE
[17,] TRUE TRUE
[18,] TRUE TRUE
[19,] TRUE TRUE
[20,] TRUE TRUE
[21,] FALSE FALSE
我不想使用一个for循环,因为它的慢,我会做很多的if语句。
有没有更好的方式来得到这个工作?
这是一个普遍的问题,似乎在r-SO上出现了很多 - 在向量化/矩阵中应用矢量化而不是循环方式的操作,其中应用于一个元素的函数依赖于其他由索引标识的元素,所以它不仅仅是应用系列函数的简单使用。我不够R的忍者写关于如何自己做这个教程的教程,但有人oughta ... –