我有“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中的数据填充数据.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列 有没有人有我的解决方案? 感谢。
答案 0 :(得分:0)
如果我理解正确,您首先会为TIMEBLOCK
的每个值找到4列的平均值。您可以使用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