私は問題があります。
0 または 1 から構成されるベクトルがあります。たとえば、(011011111011100001111) です。R では、ベクトル 2 1、3 1、4 1 などに出現する回数を数える方法を理解する必要があります。この例のベクトルには、11 の 1 倍、111 の 1 倍、1111 の 1 倍、11111 の 1 倍があります。
どうもありがとう、ピーター
私は問題があります。
0 または 1 から構成されるベクトルがあります。たとえば、(011011111011100001111) です。R では、ベクトル 2 1、3 1、4 1 などに出現する回数を数える方法を理解する必要があります。この例のベクトルには、11 の 1 倍、111 の 1 倍、1111 の 1 倍、11111 の 1 倍があります。
どうもありがとう、ピーター
のような実際のベクトルがあると仮定していますc(0, 1, 1, 0...)
。
table
と を使用したソリューションを次に示しrle
ます。また、もう少し興味深いものにするために、いくつかの長いサンプル データも提供しました。
set.seed(1)
myvec <- sample(c(0, 1), 100, replace = TRUE)
temp <- rle(myvec)
table(temp$lengths[temp$values == 1])
#
# 1 2 3 4 6
# 15 8 1 2 1
実際、非常に長い 1 と 0 の文字列を扱っている場合は、strsplit
上記と同じロジックを使用して従うだけです。
myvec <- "00110111100010101101101000001001001110101111110011010000011010001001"
myvec <- as.numeric(strsplit(myvec, "")[[1]])
ここでは数値に変換していますが、これは先ほどと同じコードを使用できるようにするためです。rle
文字ベクトルでも使用できます。
rle
あなたの友達です:
vec <-c(0,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,0,1,1,1,1)
res <-data.frame(table(rle(vec)))
res[res$values==1,]
lengths values Freq
6 1 1 0
7 2 1 1
8 3 1 1
9 4 1 1
10 5 1 1