2013-04-16 1 views
1

나는 R에 상당히 새롭다. 그러나 나는 현재의 문제보다 훨씬 더 큰 문제를 다루었 다. 포럼을 검색하여 관련 주제를 찾았지만 아무도이 상황에 대한 트릭을 수행하지 않습니다. 각 날짜 인해 전송 중단에 하나 이상의 6 시간 시간 빈 (안 연속 데이터 집합을 갖는,새로운 테이블로 범주 적 수단을 전송하는 것

> head(diving) 
    tagID ddmmyy Hour.GMT. Hour.Local. X0 X3 X10 X20 X50 X100 X150 X200 X300 X400 
1 122097 250912   0   9 0.0 0.0 0.3 12.0 15.3 59.6 12.8 0.0 0 0 
2 122097 260912   0   9 0.0 2.4 6.9 5.5 13.7 66.5 5.0 0.0 0 0 
3 122097 260912   6   15 0.0 1.9 3.6 4.1 12.7 39.3 34.6 3.8 0 0 
4 122097 260912  12   21 0.0 0.2 5.5 8.0 18.1 61.4 6.7 0.0 0 0 
5 122097 280912   6   15 2.4 9.3 6.0 3.4 7.6 21.1 50.3 0.0 0 0 
6 122097 290912  18   3 0.0 0.2 1.6 6.4 41.4 50.4 0.0 0.0 0 0 

이것은 태그 데이터 :

나는 14 개 변수의 184 개 관측 데이터 집합을 가지고). 각 6 시간 보관함에서, 동물이 탔던 깊이는 % 단위로 10 칸으로 나누어집니다. 따라서 X0 = 0-3m 사이에서 보낸 시간의 비율, X3 = 3-10m 사이에서 보낸 시간의 비율 등.

내가 처음으로하고 싶은 것은 각 깊이 저장소에서 평균 시간을 소비하고 그것을 플로팅하는 것입니다. 시작하려면, 나는 다음과 같은 한 :

avg0<-mean(diving$X0) 
avg3<-mean(diving$X3) 
avg10<-mean(diving$X10) 
avg20<-mean(diving$X20) 
avg50<-mean(diving$X50) 
avg100<-mean(diving$X100) 
avg150<-mean(diving$X150) 
avg200<-mean(diving$X200) 
avg300<-mean(diving$X300) 
avg400<-mean(diving$X400) 

이 시점에서, 나는 다음 결과 수단을 플롯하는 방법을 잘하지 않았다을, 그래서 나는 그들에게 목록을 만들어 :

divingmeans<-list(avg0, avg3, avg10, avg20, avg50, avg100, avg150, avg200, avg300, avg400) 

상자 그림 (divingmeans를) X 축은 1:10이고 Y 축은 % 0-30입니다. 그러나 히스토그램뿐만 아니라 x 축은 순위 1 : 10이 아닌 카테고리 빈 이름 (예 : avg3 또는 X3)을 제공합니다.

> plot(divingmeans) 
Error in xy.coords(x, y, xlabel, ylabel, log) : 
    'x' is a list, but does not have components 'x' and 'y' 
> hist(divingmeans) 
Error in hist.default(divingmeans) : 'x' must be numeric 

나는 또한 시도했다 : :

> df<-as.data.frame(divingmeans) 
> df 
    X3.33097826086957 X3.29945652173913 X8.85760869565217 X17.6461956521739 X30.2614130434783 
1   3.330978   3.299457   8.857609   17.6462   30.26141 
    X29.3565217391304 X6.44510869565217 X0.664130434782609 X0.135869565217391 X0.0016304347826087 
1   29.35652   6.445109   0.6641304   0.1358696   0.001630435 

> df <- data.frame(matrix(unlist(divingmeans), nrow=10, byrow=T)) 
> df 
    matrix.unlist.divingmeans...nrow...10..byrow...T. 
1          3.330978261 
2          3.299456522 
3          8.857608696 
4          17.646195652 
5          30.261413043 
6          29.356521739 
7          6.445108696 
8          0.664130435 
9          0.135869565 
10          0.001630435 

도의는의 종류를 제공하는 다음을 제공

HIST()와 플롯() 내가 찾고있는 테이블.

이 테이블을 적절한 테이블로 변환하기위한 근본적인 솔루션이 있어야한다는 것을 알고 있지만 필자의 삶에 대해 알아낼 수는 없습니다. 평균적으로 각 다이빙 빈에서 보낸 시간의 비율을 보여주는 기본 막대 그래프를 만들 수 있습니다. 이 목적을 위해 가장 적합한 형식은 col1 = bin (카테고리, 예 : avg50) 및 col2 = % (해당 카테고리에서 보낸 평균 시간 %)와 같은 두 개의 열이있는 테이블입니다.

또한 데이터가 다른 타이밍 저장소로 분할되어 있음을 알 수 있습니다. 결국 나는 시간별로 데이터를 분리하여 예를 들어 평균 다이빙 깊이가 주야간으로 이동하는지 등을 확인할 수 있기를 원합니다. 예를 들어, X0[which(Hour.GMT.=="6")]을 선택하면이 초기 비트의 코드가 완성되면 시간별로 동일한 작업을 수행 할 수 있습니다. 이것에 팁은 또한 아주 환영받을 것입니다.

답변

0

어떻게 계획하고 싶습니까?

# grab the means of each column 
diving.means <- colMeans(diving[, -(1:5)]) 


# plot it 
plot(diving.means) 

# boxplot 
boxplot(diving.means) 

youd가이 siply, 열 이름에서 간격에 하한을 잡아 X

lowerIntervalBound <- gsub("X", "", names(diving)[-(1:5)]) 

# you can convert these to numeric and plot against them 
lowInts <- as.numeric(lowerIntervalBound) 
plot(x=lowInts, y=diving.means) 

# ... or taking log 
plot(x=log(lowInts), y=diving.means) 

# ... or as factors (similar to basic plot) 
plot(x=factor(lowInts), y=diving.means) 

를 벗겨 대신 다이빙을 두는 것은 list 의미의하는 vector에 이르렀 시도 싶은 경우에 (c 사용).

당신은 data.frame로 결합 할 경우

data.frame(lowInts, diving.means) 

# or adding a row id if needed. 
data.frame(rowid=seq(along=diving.means), lowInts, diving.means) 
+0

감사를 분석 할 수 있습니다, 얘들 아! 이 사람은 트릭을 아주 직설적으로하는 것처럼 보였습니다. 그런 다음 [when()] 명령을 사용하여 일별 휴지통으로 쉽게 구분할 수있었습니다. 매우 감사! – stewart6

2

당신이 그것을 훨씬 쉽게 긴 형식의 데이터를 처리하기 위해 찾을 것이라 생각합니다.

reshape을 사용하면 reshape을 사용할 수 있습니다. data.table을 사용하여 그룹별로 평균을 쉽게 계산하는 방법을 보여줄 것입니다.

library(data.table) 
DT <- data.table(diving) 

DTlong <- reshape(DT, varying = list(5:14), direction = 'long', 
    times = c(0,3,10,20,50,100,150,200,300,400), 
    v.names = 'time.spent', timevar = 'hours') 

timeByHours <- DTlong[,list(mean.time = mean(time.spent)),by=hours] 

# you can then plot the two column data.table 

plot(timeByHours, type = 'l') 

enter image description here

이제 깊이/시간/시간 날짜의 조합에 의해 제안

관련 문제