我想找到一种方法来确定向量的两个或多个连续元素是否相等。
例如,在向量<div class="wrapper">
<div class="reading_chat_left" align="left">
<div class="reading_chat_img" style="min-width: 50px; display: inline-block">
<img class="img_small" src="https://i.ytimg.com/vi/HCjNJDNzw8Y/maxresdefault.jpg">
</div>
<div class="reading_chat_text" style="display:inline-block; width: 60%">
<div class="reading_chat_left_name">It goes down</div>
<div class="reading_chat_left_text" style="background-color: orange; padding: 5px">abcd blah In this tutorial I will show you how to create Facebook style chat bubbles using CSS only. CSS Code for Chat Bubbles. Here is how chat</div>
</div>
</div>
<div class="reading_chat_left" align="right">
<div class="reading_chat_text" style="display:inline-block; width: 60%;
float: left;">
<div class="reading_chat_left_name">It goes down</div>
<div class="reading_chat_left_text" style="background-color: orange; padding: 5px">abcd blah In this tutorial I will show you how to create Facebook style chat bubbles using CSS only. CSS Code for Chat Bubbles. Here is how chat</div>
</div>
<div class="reading_chat_img" style="min-width: 50px; display: inline-block">
<img class="img_small" src="https://i.ytimg.com/vi/HCjNJDNzw8Y/maxresdefault.jpg">
</div>
</div>
中,第一个,第二个和第三个元素相等。
使用以下命令,我可以确定向量x=c(1,1,1,2,3,1,3)
是否包含两个或多个等于y
或2
的连续元素
3
还有其他更快的方法吗?
编辑
假设我们有向量all(rle(y)$lengths[which( rle(y)$values==2 | rle(y)$values==3 )]==1)
。
我想要一个包含三个元素的向量作为输出。第一个元素将引用值z=c(1,1,2,1,2,2,3,2,3,3)
,第二个元素将引用值1
,第三个元素将引用2
。如果3
的两个或多个连续元素对于1
的一个值相同,而z
的两个或多个连续元素相同,则输出矢量的元素的值将等于1,2,3
。因此,向量0
的输出将为z
。
对于向量(1,1,1)
,输出将为w=c(1,1,2,3,2,3,1)
,因为仅对于值1,0,0
,存在两个连续的元素,即在{{的第一个和第二个位置1}}。
答案 0 :(得分:1)
假设系列名称为z=c(1,1,2,1,2,2,3,2,3,3)
,则可以执行以下操作:
(unique(z[c(FALSE, diff(z) == 0)]) >= 0)+0
,它将输出到1, 1, 1
,
在其他序列上运行上述命令时:
w=c(1,1,2,3,2,3,1)
然后(unique(w[c(FALSE, diff(w) == 0)]) >= 0)+0
将返回到1
您也可以尝试将其输出为1,1,1或1,0,0等精确输出
(unique(z[c(FALSE, diff(z) == 0)]) == unique(z))+0 #1,1,1 for z and 1,0,0 for w
逻辑:
diff
命令将取相应的第二个项目与先前的项目之间的差异,因为总差异始终比项目数少1个,因此我将第一项添加为FALSE。然后将其与原始序列进行子集化,并进行布尔比较,以得出返回的差是否为零。最后,我们通过询问它们是否大于或等于0来将它们转换为1(要获得1的序列,还可以在其他条件下对其进行检验以得出1)。
假设您的序列没有负数。
答案 1 :(得分:1)
我不确定我是否理解您的问题,因为它的措辞可能更好。第一部分只是询问如何找到向量中的连续元素是否相等。答案是结合使用diff()
函数和零差校验:
z <- c(1,1,2,1,2,2,3,2,3,3)
sort(unique(z[which(diff(z) == 0)]))
# [1] 1 2 3
w <- c(1,1,2,3,2,3,1)
sort(unique(w[which(diff(w) == 0)]))
# [1] 1
但是您的编辑示例似乎暗示您正在查看向量中是否存在重复的单位,其中只有整数1、2或3。您的输出将始终为X,Y,Z,其中
如果重复至少一个“ 1”,则X为1,否则为0
如果至少重复一个“ 2”,则Y为2,否则为0
如果重复至少一个“ 3”,则Z为3,否则为0
这正确吗?
如果是,请参见以下内容
continuously <- function(x){
s <- sort(unique(x[which(diff(x) == 0)]))
output <- c(0,0,0)
output[s] <- s
return(output)
}
continuously(z)
# [1] 1 2 3
continuously(w)
# [1] 1 0 0