連続するシーケンスごとにグループ番号を作成する 質問する

連続するシーケンスごとにグループ番号を作成する 質問する

以下に data.frame があります。列の連続するシーケンスに従ってデータを分類する列 'g' を追加したいと思いますh_no。つまり、最後の列 'g' に示されているように、h_no の最初のシーケンスは1, 2, 3, 4グループ 1、2 番目のシリーズh_no(1 ~ 7) はグループ 2 というようになります。

h_no   h_freq    h_freqsq g
1     0.09091 0.008264628 1
2     0.00000 0.000000000 1
3     0.04545 0.002065702 1
4     0.00000 0.000000000 1  
1     0.13636 0.018594050 2
2     0.00000 0.000000000 2
3     0.00000 0.000000000 2
4     0.04545 0.002065702 2
5     0.31818 0.101238512 2
6     0.00000 0.000000000 2
7     0.50000 0.250000000 2 
1     0.13636 0.018594050 3 
2     0.09091 0.008264628 3
3     0.40909 0.167354628 3
4     0.04545 0.002065702 3

ベストアンサー1

さまざまな手法を使用して、データに列を追加できます。以下の引用は、関連するヘルプ テキストの「詳細」セクションからのものです[[.data.frame

データ フレームは、いくつかのモードでインデックス付けできます。 およびを単一のベクトル インデックス (または)[とともに使用すると、データ フレームはリストであるかのようにインデックス付けされます。[[x[i]x[[i]]

my.dataframe["new.col"] <- a.vector
my.dataframe[["new.col"]] <- a.vector

のdata.frameメソッドはリストとして$扱いますx

my.dataframe$new.col <- a.vector

[と を2つのインデックス(と)[[とともに使用すると、行列のインデックス付けのように動作します。x[i, j]x[[i, j]]

my.dataframe[ , "new.col"] <- a.vector

メソッドでは、data.frame列と行のどちらを操作しているかを指定しない場合は、列を意味するものと想定されます。


あなたの例では、これは機能するはずです:

# make some fake data
your.df <- data.frame(no = c(1:4, 1:7, 1:5), h_freq = runif(16), h_freqsq = runif(16))

# find where one appears and 
from <- which(your.df$no == 1)
to <- c((from-1)[-1], nrow(your.df)) # up to which point the sequence runs

# generate a sequence (len) and based on its length, repeat a consecutive number len times
get.seq <- mapply(from, to, 1:length(from), FUN = function(x, y, z) {
            len <- length(seq(from = x[1], to = y[1]))
            return(rep(z, times = len))
         })

# when we unlist, we get a vector
your.df$group <- unlist(get.seq)
# and append it to your original data.frame. since this is
# designating a group, it makes sense to make it a factor
your.df$group <- as.factor(your.df$group)


   no     h_freq   h_freqsq group
1   1 0.40998238 0.06463876     1
2   2 0.98086928 0.33093795     1
3   3 0.28908651 0.74077119     1
4   4 0.10476768 0.56784786     1
5   1 0.75478995 0.60479945     2
6   2 0.26974011 0.95231761     2
7   3 0.53676266 0.74370154     2
8   4 0.99784066 0.37499294     2
9   5 0.89771767 0.83467805     2
10  6 0.05363139 0.32066178     2
11  7 0.71741529 0.84572717     2
12  1 0.10654430 0.32917711     3
13  2 0.41971959 0.87155514     3
14  3 0.32432646 0.65789294     3
15  4 0.77896780 0.27599187     3
16  5 0.06100008 0.55399326     3

おすすめ記事