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

我需要每个 dendrometer 的第一个元素作为 NA,所以每次 R 计算一个新的 dendrometer(独立于位置)的“max”时,都从 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

你能否让我知道我可以计算每个环内每个 dendrometer 的 max 列的 MEAN(sapply,聚合?)而不是计算整个 max 列的平均值?注意: dendro 1 in place 1 与 dendro 1 in place 2 不同,我需要为它们中的每一个提供不同的信息

4

3 回答 3

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 回答
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 回答
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函数来查找之间的差异,dendrometer并使用该is.na<-函数来替换 中max的值NA

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 回答