如何在R编程中处理多组数据?

时间:2013-02-20 15:16:20

标签: r cut mean

的Ca     data< - cut(data $ Time,breaks = seq(0,max(data $ Time)+400,400))     通过(数据$ Oxytocin,cut,mean)

但这只适用于一个人的数据....但我有十个人有他们自己的时间和催产素数据......我怎样才能同时得到他们的平均值?而不是具有此类型输出:

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

有没有办法可以获得这些削减的清单?

1 个答案:

答案 0 :(得分:1)

这是使用IRanges包的解决方案。

idx假设您的数据格式为TimedataTimedata,...等等。因此,它会创建索引1,3,5,...ncol(df)-1

ir1是你想要的平均间隔。它的宽度为400.每个时间列(此处为第1列和第3列)从0到最大(时间)。

ir2是间隔宽度= 1的相应时间列。

然后我得到ir1ir2的重叠,它基本上告诉我ir2与ir1(我们想要的)重叠的区间,我从中计算平均值并输出{{1 }}

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 列,您将获得一个列表,其中包含该间隔的间隔和平均值。