0

Caデータ<-cut(data $ Time、breaks = seq(0、max(data $ Time)+400、400))by(data $ Oxytocin、cuts、mean)

しかし、これは1人のデータに対してのみ機能します....しかし、私には自分の時間とオキシトシンのデータを持つ10人の人がいます....どうすれば彼らの平均を同時に取得できますか?また、このタイプの出力を持たせる代わりに:

cuts: (0,400]
[1] 0.7
------------------------------------------------------------ 
cuts: (400,800]
[1] 0.805

それらのカットのリストを取得する方法はありますか?

4

1 に答える 1

1

IRangesこれがパッケージを使用したソリューションです。

idxは、データ形式が 、、、、... であると想定してTimeいます。そのため、インデックスが作成されます。dataTimedata1,3,5,...ncol(df)-1

ir1は、平均が必要な間隔です。幅は 400 です。各 Time 列 (ここでは列 1 と 3) の 0 から max(Time) までです。

ir2間隔幅 = 1 の対応する時間列です。

次に、とのオーバーラップを取得しますir1ir2これは、基本的に、ir2 のどの間隔が ir1 とオーバーラップするか (必要な場合) を示し、そこから平均を計算して を出力しdata.frameます。

idx <- seq(1, ncol(df), by=2)
o <- lapply(idx, function(i) {  
    ir1 <- IRanges(start=seq(0, max(df[[i]]), by=401), width=401)
    ir2 <- IRanges(start=df[[i]], width=1)
    t <- findOverlaps(ir1, ir2)
    d <- data.frame(mean=tapply(df[[i+1]], queryHits(t), mean))
    cbind(as.data.frame(ir1), d)
})

> o
# [[1]]
#   start  end width      mean
# 1     0  400   401 0.6750000
# 2   401  801   401 0.8050000
# 3   802 1202   401 0.8750000
# 4  1203 1603   401 0.2285333

# [[2]]
#   start  end width    mean
# 1     0  400   401 0.73508
# 2   401  801   401 0.13408
# 3   802 1202   401 0.26408
# 4  1203 1603   401 1.06408
# 5  1604 2004   401 3.06408

列ごとTimeに、間隔とその間隔の平均のリストが表示されます。

于 2013-02-20T15:52:01.197 に答える