0

我有“Sec1OSp”,它看起来像这样:

TIMEBLOCK   ep.HRC_E    ep.HRC_D    ep.HRCcm_E  ep.HRCcm_D
   1           NA          NA          NA          NA
   2           NA          NA          NA          NA
   3           NA          NA          NA          NA
   4           NA          NA          NA          NA
   5           NA          NA          NA          NA
   6           NA          5           5           5
   7           NA          5           10          5
   8           NA          5           20          5
   9           NA          5           20          5 
   10          NA          10          20          10
   11          20          10          20          10
   12          20          10          20          10
   13          20          NA          20          10
   14          20          NA          20          10
   15          10          NA          10          10
   16          10          NA          10          5
   17          NA          NA          NA          NA
   18          NA          NA          NA          NA
   19          NA          NA          NA          NA
   20          NA          NA          NA          NA
   21          NA          NA          NA          NA
   22          NA          NA          NA          NA
   23          NA          NA          NA          NA
   24          NA          NA          NA          NA

我有“data.EP.S1p”,它看起来像这样:

TIMEBLOCK   ep.HRC_E    ep.HRC_D    ep.HRCcm_E  ep.HRCcm_D
   1           NA          NA          NA          NA
   2           NA          NA          NA          NA
   3           NA          NA          NA          NA
   4           NA          NA          NA          NA
   5           NA          NA          NA          NA
   6           NA          NA          NA          NA
   7           NA          NA          NA          NA
   8           NA          NA          NA          NA
   9           NA          NA          NA          NA
   10          NA          NA          NA          NA
   11          20          NA          NA          NA
   12          20          NA          NA          NA
   13          20          NA          NA          NA
   14          20          NA          NA          NA
   15          10          NA          NA          NA
   16          10          NA          NA          NA
   17          NA          NA          NA          NA
   18          NA          NA          NA          NA
   19          NA          NA          NA          NA
   20          NA          NA          NA          NA
   21          NA          NA          NA          NA
   22          NA          NA          NA          NA
   23          NA          NA          NA          NA
   24          NA          NA          NA          NA

此代码(如下)当前使用来自 Sec1OSp$ep.HRC_E 的数据来填充 data.EP.S1p$ep.HRC_E。

  for(t in 1:24) {
    Sec1OSpt <- subset(Sec1OSp, TIMEBLOCK==t)
    Sec1OSptnonNArows <- Sec1OSpt[!is.na(Sec1OSpt$ep.HRC_E),]
    if(nrow(Sec1OSptnonNArows) > 0) {
      if(sum(Sec1OSptnonNArows$ep.HRC_E, na.rm=TRUE) > 0) {
        data.EP.S1p$ep.HRC_E[t] <- (sum(Sec1OSptnonNArows$ep.HRC_E, na.rm=TRUE)) / nrow(Sec1OSptnonNArows)
      }
      else {
        data.EP.S1p$ep.HRC_E[t] <- NA
      }
    }

我希望能够循环此代码,以便将其应用于所有 4 列,从而使用 Sec1OSp 中的 4 列来填充 data.EP.S1p 中的 4 列有人有我的解决方案吗?谢谢。

4

1 回答 1

0

如果我理解正确,您首先要找到 4 列的每个值的平均值TIMEBLOCK。您可以通过使用aggregate函数来做到这一点。之后,您可以在data.EP.S1p使用中填写这些值merge

Sec1OSp <- read.table(textConnection("TIMEBLOCK   ep.HRC_E    ep.HRC_D    ep.HRCcm_E  ep.HRCcm_D\n1           NA          NA          NA          NA\n2           NA          NA          NA          NA\n3           NA          NA          NA          NA\n4           NA          NA          NA          NA\n5           NA          NA          NA          NA\n6           NA          5           5           5\n7           NA          5           10          5\n8           NA          5           20          5\n9           NA          5           20          5\n10          NA          10          20          10\n11          20          10          20          10\n12          20          10          20          10\n13          20          NA          20          10\n14          20          NA          20          10\n15          10          NA          10          10\n16          10          NA          10          5\n17          NA          NA          NA          NA\n18          NA          NA          NA          NA\n19          NA          NA          NA          NA\n20          NA          NA          NA          NA\n21          NA          NA          NA          NA\n22          NA          NA          NA          NA\n23          NA          NA          NA          NA\n24          NA          NA          NA          NA"), 
    header = TRUE)

data.EP.S1p <- read.table(textConnection("TIMEBLOCK   ep.HRC_E    ep.HRC_D    ep.HRCcm_E  ep.HRCcm_D\n1           NA          NA          NA          NA\n2           NA          NA          NA          NA\n3           NA          NA          NA          NA\n4           NA          NA          NA          NA\n5           NA          NA          NA          NA\n6           NA          NA          NA          NA\n7           NA          NA          NA          NA\n8           NA          NA          NA          NA\n9           NA          NA          NA          NA\n10          NA          NA          NA          NA\n11          20          NA          NA          NA\n12          20          NA          NA          NA\n13          20          NA          NA          NA\n14          20          NA          NA          NA\n15          10          NA          NA          NA\n16          10          NA          NA          NA\n17          NA          NA          NA          NA\n18          NA          NA          NA          NA\n19          NA          NA          NA          NA\n20          NA          NA          NA          NA\n21          NA          NA          NA          NA\n22          NA          NA          NA          NA\n23          NA          NA          NA          NA\n24          NA          NA          NA          NA"), 
    header = TRUE)


avgdata <- aggregate(Sec1OSp[, 2:5], by = list(Sec1OSp$TIMEBLOCK), FUN = function(x) mean(x, na.rm = TRUE))
names(avgdata)[1] <- "TIMEBLOCK"
avgdata
##    TIMEBLOCK ep.HRC_E ep.HRC_D ep.HRCcm_E ep.HRCcm_D
## 1          1      NaN      NaN        NaN        NaN
## 2          2      NaN      NaN        NaN        NaN
## 3          3      NaN      NaN        NaN        NaN
## 4          4      NaN      NaN        NaN        NaN
## 5          5      NaN      NaN        NaN        NaN
## 6          6      NaN        5          5          5
## 7          7      NaN        5         10          5
## 8          8      NaN        5         20          5
## 9          9      NaN        5         20          5
## 10        10      NaN       10         20         10
## 11        11       20       10         20         10
## 12        12       20       10         20         10
## 13        13       20      NaN         20         10
## 14        14       20      NaN         20         10
## 15        15       10      NaN         10         10
## 16        16       10      NaN         10          5
## 17        17      NaN      NaN        NaN        NaN
## 18        18      NaN      NaN        NaN        NaN
## 19        19      NaN      NaN        NaN        NaN
## 20        20      NaN      NaN        NaN        NaN
## 21        21      NaN      NaN        NaN        NaN
## 22        22      NaN      NaN        NaN        NaN
## 23        23      NaN      NaN        NaN        NaN
## 24        24      NaN      NaN        NaN        NaN

data.EP.S1p <- merge(data.EP.S1p[, "TIMEBLOCK", drop = FALSE], avgdata, all.x = TRUE)
data.EP.S1p
##    TIMEBLOCK ep.HRC_E ep.HRC_D ep.HRCcm_E ep.HRCcm_D
## 1          1      NaN      NaN        NaN        NaN
## 2          2      NaN      NaN        NaN        NaN
## 3          3      NaN      NaN        NaN        NaN
## 4          4      NaN      NaN        NaN        NaN
## 5          5      NaN      NaN        NaN        NaN
## 6          6      NaN        5          5          5
## 7          7      NaN        5         10          5
## 8          8      NaN        5         20          5
## 9          9      NaN        5         20          5
## 10        10      NaN       10         20         10
## 11        11       20       10         20         10
## 12        12       20       10         20         10
## 13        13       20      NaN         20         10
## 14        14       20      NaN         20         10
## 15        15       10      NaN         10         10
## 16        16       10      NaN         10          5
## 17        17      NaN      NaN        NaN        NaN
## 18        18      NaN      NaN        NaN        NaN
## 19        19      NaN      NaN        NaN        NaN
## 20        20      NaN      NaN        NaN        NaN
## 21        21      NaN      NaN        NaN        NaN
## 22        22      NaN      NaN        NaN        NaN
## 23        23      NaN      NaN        NaN        NaN
## 24        24      NaN      NaN        NaN        NaN
于 2013-03-13T01:21:34.643 回答