2013-02-20 2 views
0

칼슘 데이터 < - 컷 (데이터 $ 시간, 휴식 시간은 = 서열 (0, 최대 (데이터 $ 시간) 400, 400))에 의해  (데이터 $ 옥시토신이, 인하, 의미)R 프로그래밍에서 여러 데이터 세트를 처리하는 방법은 무엇입니까?

하지만이 것 오직 한 사람의 데이터에 대해서만 작동합니다 .... 그러나 나는 자신의 Time과 oxytocin 데이터를 가진 10 명의 사람들이 있습니다 .... 어떻게 그들의 평균을 동시에 얻을 수 있습니까? 또한이 유형의 출력 대신 :

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

이러한 상처의 목록을 얻을 수있는 방법이 있습니까?

+0

데이터 구조의 예를 제공해 주시겠습니까? R에 그것을 어떻게 저장하고 있습니까? 그것을 알면, 나는 간단한 해결책을 도울 수 있다고 생각합니다. –

+0

난 그냥 사용하고 있습니다 .... data = read.delim ("clipboard") ... 데이터가 Excel 스프레드 시트에서 나온 것입니다. –

+0

좋아, 알겠습니다. 데이터 구조에 대한 정확한 생각이 필요합니다. 'dump (head (data, 10), ")'를 실행하여 출력을 붙여 넣을 수 있습니까? 약간의 데이터를 공유 할 수 있습니까? 그것은 많은 도움이 될 것입니다. 기밀성 문제가있는 경우 먼저 임의의 값으로 숫자를 곱할 수 있습니다. –

답변

1

여기에 IRanges 패키지를 사용하는 해결책이 있습니다.

idx는 데이터 형식이 Timedata는, Time는, data는, ... 등등 .. 그래서,이 인덱스 1,3,5,...ncol(df)-1을 만들어 가정합니다.

ir1은 원하는 평균 간격입니다. 너비는 400입니다. 각 시간 열 (여기에서 열 1 및 3)에 대해 0에서 최대 (시간)까지갑니다.

ir2

1. 그럼 난 기본적으로 IR2는 (우리가 할) IR1와 중복에서 간격들하는 나에게 말한다 ir2ir1의 중복을 얻을 = 간격 폭의 해당 시간 열되는 I 평균을 계산하고 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 열에는 해당 간격의 간격과 평균이있는 목록이 표시됩니다.

+0

답변을 주셔서 감사합니다.하지만 다음과 같은 오류가 발생합니다. as.data.frame (ir1)의 오류 : 'ir1'개체를 찾을 수 없습니다. –

+0

이 데이터 또는 다른 데이터를 찾으려면 어떻게해야합니까? – Arun

+0

'IRanges'를 사용하여'IRanges' 패키지를 설치하고로드 했습니까? – Arun

관련 문제