我对R来说还是比较新的,并且正在努力(A)构建滚动功能,并且(B)将该功能应用于整个数据框。
以下等式是我尝试为我的data.frame计算的:
DSCOREx = {[(BAIX-3 + BAIX-2 + BAIX-1)/3] - [(BAIX + BAIX+1 + BAIX+2)/3]}
/ {√STDX * √(2/3)}
" BAI X-n" = X-n年的每个单元格中的值 示例:" BAI X-1" = X年之前一年的BAI值。
以下是data.frame的示例:
Year <- c(2000:2015)
S1 <- c(10,14,12,9,6,14,7,12,11,8,9,15,9,10,7,11)
S2 <- c(5,8,9,14,12,10,8,7,11,9,14,8,11,10,6,9)
S3 <- c(12,13,9,8,11,7,10,9,11,14,8,6,10,9,12,14)
df <- rbind(Year, S1, S2, S3)
colnames(df) <- df[1,]
df <- df[-1,]
基本上我希望将方程应用于每个样本(S1-S3)的每个年度值(即BAI),并且输出将是每个样本每年都有DSCORE的新数据帧。
我从未编写过函数或将其应用于data.frame,所以我开始尝试将等式放在函数形式中:
STDx <- function (x) {(((((x-3)-((x-3 + x-2 + x-1)/3))^2)+(((x-2)-((x-3 + x-2 + x-1)/3))^2)+(((x-1)-((x-3 + x-2 + x-1)/3))^2))+((((x)-((x + x+1 + x+2)/3))^2)+(((x+1)-((x + x+1 + x+2)/3))^2)+(((x+2)-((x + x+1 + x+2)/3))^2)))/2}
DSCOREx <- function(x) {(((x-3 + x-2 + x-1)/3) - ((x + x+1 + x+2)/3)) / ((sqrt(STDx)) * (sqrt(2/3)))}
现在我不知道接下来该怎么做才能将这些函数应用到我的data.frame(或者如果它们正确编写了!)。有关如何将该功能应用于我的data.frame的任何建议将不胜感激。感谢。
答案 0 :(得分:0)
我的问题并不完全清楚。您应该定义X,n和STDX。但也许这就是你要找的东西。
DSCOREx <- matrix(0,nrow=nrow(df), ncol = ncol(df))
colnames(DSCOREx) <- colnames(df)
rownames(DSCOREx) <- rownames(df)
for (i in seq(1,nrow(df))){
for (j in seq(4,(ncol(df)-3))){
DSCOREx[i,j] <- (df[i,j-3] + df[i,j-2] + df[i,j-1] - df[i,j+1] - df[i,j+2] - df[i,j+3])/3
}
}
我没有包括分母。