0

データは次のとおりです。

   # vector1 dates 
     reading.dates <- as.Date(c("2012-02-13","2012-02-20","2012-02-28"))

     mydat <- data.frame (ID = c("A", "B", "C", "D"), Date1 = c(1:4),
      Date2 = c(5:8), Date3 = c(11:14))

     mydat
  ID Date1 Date2 Date3
1  A     1     5    11
2  B     2     6    12
3  C     3     7    13
4  D     4     8    14

これが私がやりたいことです:

IDレベルごとに、

date1とdate2の間

差を計算するのは日付です-

reading.dates[2] - reading.dates[1] = 7 = say "Y"

対応する日付値と平均を追加します-

                (date1 + date2) / 2 = say "X"
                   then multiply = X * Y


 for indiviudual A:((1 + 5) / 2)* 7 )

date2とdate3の間

同様に、date2とdate3の間で....ファイルの最後まで、実際にはもっと多くの変数があります

reading.dates [3] --reading.dates[2]8日間の時差

個人の場合(5 + 11)/ 2)* 8

次に、すべての値を追加します。

Aの場合は

((1 + 5) / 2)* 7 ) + ((5+11)/2) * 8) 

ありがとう

4

1 に答える 1

1

このコードを試してみてください。どのサイズのdata.frameと日付ベクトルでも機能するはずです。

calculateData <- function(dates, data)
{
    if (length(dates) != (ncol(data)-1))
        stop("The columns and dates doesn't match")

    out <- as.data.frame(NULL)
    for (i in 1:nrow(data))
    {
        x <- NULL
        for (j in 2:length(data))
            x <- c(x, (data[i,j]+data[i,j+1])/2 * difftime(dates[j], dates[j-1], "days"))
        out <- rbind(out, c(data[i,1], sum(x)))
    }

    colnames(out) <- c("ID", "VAL")
    return(out);
}

reading.dates <- as.Date(c("2012-02-13","2012-02-20","2012-02-28"))
mydat <- data.frame (ID = c("A", "B", "C", "D"), Date1 = c(1:4), Date2 = c(5:8), Date3 = c(11:14))

cd <- calculateData(reading.dates, mydat)
print(cd)

データを返す方法を自分で変更できます。

   > print(cd)
      ID VAL
    1  1  85
    2  2 100
    3  3 115
    4  4 130
于 2012-05-02T06:44:59.717 に答える