各列が動物の求愛中のさまざまな行動を表す時系列の数字(0から8)であるデータフレームがあります。ある行動の後に別の行動が続くようなパターンがあるかどうかを確認したいと思います。特定の時間間隔の後、特定の動作に続く動作の頻度を計算できる関数を作成しました。
> data[,3]
[1] 1 1 1 1 7 7 3 3 7 3 1 1 8 1 3 3 3 5 1 1 4 ...
neighbor <- function(DATA, BEHAVIOR, INTERVAL)
{
total=c(0)
tmp = data.frame(total=c(0:8),Freq=rep(0,9))
number_of_x = which(DATA == BEHAVIOR)
for(i in number_of_x){
total = append(total,DATA[i+INTERVAL,])
}
tmp = merge(tmp,table(total), by=c("total"), all=T)
tmp[is.na(tmp)] <- 0
subset(tmp, select = ncol(tmp))
}
したがって、たとえば3番目の列、動作3、および時間内の次の動作(1)の関数を実行すると、必要なものが得られます。
> neighbor(as.data.frame(data[,3], 3, 1]
Freq.y
0 0.01
1 0.71
2 0.01
3 0.21
4 0.01
5 0.04
6 0.01
7 0.02
8 0.00
ここで、同様の関数を使用して、9つの動作の頻度を取得したいと思います。何かのようなもの:
neighborAll <- function(DATA, INTERVAL)
{
total=c(0)
tmp = data.frame(total=c(0:8),Freq=rep(0,9))
for(a in c(0:8)){
number_of_x = which(DATA == a)
for(i in number_of_x){
total = c(total,DATA[i+INTERVAL,])
}
tmp=merge(tmp, table(total), by = c("total"), all=T)
tmp[is.na(tmp)] <- 0
}
tmp[,3:9]
}
> neighborAll(as.data.frame(data[,3], 1)
私は得る:
Error in merge.data.frame(tmp, table(total), by = c("total"), all = T) :
there is already a column named ‘Freq.x’
どんなアイデアでも歓迎します。よろしくお願いします、ホセ