使用数组:
my_array <- c(F,T,T,F,F,T,T,T,F,T,F)
我需要一个脚本来告诉我该值从False变为True的次数。只是通过眼睛很容易看到它做了3次。我只对它从False切换到True而不是从True切换到False感兴趣。
答案 0 :(得分:8)
由于您只关心它从FALSE变为TRUE的时间,因此这是向量的diff
等于1的次数:
sum(diff(my_array) == 1)
# [1] 3
在我看来,这是解决问题的最直接方式,但请注意R还有一个优秀的rle
函数,它返回向量的行程编码,即连续的每个部分的长度向量中的值。您可以使用rle
通过计算采用FALSE值的运行次数(不包括最后一次)来解决您的特定查询:
sum(head(rle(my_array)$values, -1) == FALSE)
# [1] 3
请注意,这两个解决方案都利用了这个只有TRUE / FALSE值的向量这一事实。计算从某个值A到某个值B的转换次数的一般方法是将head(vector, -1)
与tail(vector, -1)
进行比较 - 即向量的最后一个元素除了第一个之外的所有元素。在你的情况下:
sum(head(my_array, -1) == FALSE & tail(my_array, -1) == TRUE)
# [1] 3
head(my_array, -1) == FALSE
的第一个元素表示my_array
的第一个元素是否为FALSE,第二个元素是第二个元素是否为FALSE,依此类推。同时,tail(my_array, -1) == TRUE
的第一个元素表示my_array
的第二元素是否为TRUE,第二个元素表示第三元素是否为TRUE,等等。因此,head(my_array, -1)
和tail(my_array, -1)
的相应元素相互分离,使我们能够检查元素对的条件。