1

次のように簡略化されたデータフレームがあります。

Day Place   dendrometer max

1   1       1   4684

2   1       1   4831

1   1       2   2486

2   1       2   2596

1   2       1   6987

2   2       1   6824

各デンドロメーターの最初の要素をNAとして必要とするため、Rが新しいデンドロメーターの「最大」を計算するたびに(場所に関係なく)、次のようにNAで始まります。

Day Place   dendrometer max

1   1       1   NA

2   1       1   4831

1   1       2   NA

2   1       2   2596

1   2       1   NA

2   2       1   6824

また、最大列全体の平均を計算する代わりに、各リング内の各デンドロメーターの最大列の平均を計算できることを教えてください(適用、集計?)。注:場所1のデンドロ1は、場所2のデンドロ1とは異なります。それぞれについて、異なる情報が必要です。

4

3 に答える 3

2
  library(data.table)
  myDat <- data.table(myDat, key="Day")

  # using the `mult` argument, make the first instance of each Day  NA
  myDat[.(Day), dendrometer := NA, mult="first"]

  # add mean
  myDat[, mean := mean(dendrometer, na.rm=TRUE), by=Day]

  # add max
  myDat[, max := max(dendrometer, na.rm=TRUE), by=Day]

結果:

  > myDat
     Day Place dendrometer     mean  max
  1:   1     1          NA 3304.333 4831
  2:   1     1        4831 3304.333 4831
  3:   1     2        2486 3304.333 4831
  4:   1     2        2596 3304.333 4831
  5:   2     1          NA 6824.000 6824
  6:   2     1        6824 6824.000 6824

使用したサンプルデータ:

  read.table(text=
  "Day Place   dendrometer
     1       1   4684
     1       1   4831
     1       2   2486
     1       2   2596
     2       1   6987
     2       1   6824", header=TRUE, stringsAsFactors=FALSE) -> myDat
于 2013-03-01T06:51:59.157 に答える
2

1 か所で 1 つのデンドロメーターの測定値を常に 2 つしか持っていませんか? その場合、他のすべての値を NA として設定できます。

#x is your data.frame
x<-read.table("clipboard",header=TRUE)
x[seq(1,nrow(x),by=2),4]<-NA

最大値は非NA値です

x[seq(2,nrow(x),by=2),4]

データがより複雑な場合、これは機能するはずです。

dup<-duplicated(x[,2:3]) #find the non-unique cases
x[!dup,4]<-NA #set the first measurements as NA
tapply(x[dup,4],which(dup),max) #compute max from others. 

平均を計算するために、最初の測定値を NA として設定する必要がないことに注意してください。

于 2013-03-01T04:35:47.883 に答える
0

まず、 の平均値をmaxで計算しtapplyます。

dat <- transform(dat,
                 mean = tapply(max, c(0, cumsum(abs(diff(dendrometer)))), mean))

  Day Place dendrometer  max   mean
1   1     1           1 4684 4757.5
2   2     1           1 4831 2541.0
3   1     1           2 2486 6905.5
4   2     1           2 2596 4757.5
5   1     2           1 6987 2541.0
6   2     2           1 6824 6905.5

関数 を使用してと の値を で置き換える関数 の違いをdiff見つけることができます。dendrometeris.na<-maxNA

is.na(dat$max) <- c(TRUE, diff(dat$dendrometer) != 0)

  Day Place dendrometer  max   mean
1   1     1           1   NA 4757.5
2   2     1           1 4831 2541.0
3   1     1           2   NA 6905.5
4   2     1           2 2596 4757.5
5   1     2           1   NA 2541.0
6   2     2           1 6824 6905.5
于 2013-03-01T09:31:42.983 に答える