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