这是我的数据框:https://gofile.io/?c=7WLqCD
它看起来像这样:
head(testframe)
Time Station1 Station2 Station3 Station4
01.01.2017 07:00 27 38 26 25
01.01.2017 14:00 22 49 25 16
01.01.2017 21:00 41 53 46 36
02.01.2017 07:00 22 38 26 19
02.01.2017 14:00 20 54 35 13
02.01.2017 21:00 36 45 30 26
我想每天计算站点1到站点4的平均值,即1-3行,4-6行,7-9行,依此类推。
class (testframe$Station1)
是factor
,我知道它必须是数字才能计算平均值。所以我试图这样转换它:
testframe[,4] = as.numeric(as.character(testframe$Station4))
这不起作用。我缺少标记为#的值。我用NA替换了它们,但是Station 3和Station 4仍然存在问题。
此代码也无法计算平均值。它给我错误的结果。
colMeans(matrix(testframe$Station1, nrow=3))
答案 0 :(得分:3)
编辑:更改OP后:
使用dplyr
:
df %>%
rename(Date=row.names) %>%
group_by(Date) %>%
summarise_at(vars(contains("S")),list(Mean=mean))
# A tibble: 2 x 5
Date Station1_Mean Station2_Mean Station3_Mean Station4_Mean
<chr> <dbl> <dbl> <dbl> <dbl>
1 01.01.2017 30 46.7 32.3 25.7
2 02.01.2017 26 45.7 30.3 19.3
数据:
df<-read.table(text=" Time Station1 Station2 Station3 Station4
01.01.2017 07:00 27 38 26 25
01.01.2017 14:00 22 49 25 16
01.01.2017 21:00 41 53 46 36
02.01.2017 07:00 22 38 26 19
02.01.2017 14:00 20 54 35 13
02.01.2017 21:00 36 45 30 26",header=T,
as.is=T,fill=T,row.names = NULL)
原始答案 :(每3行取平均值)
我们可以执行以下操作(我已过滤掉非数字内容):
colMeans(df[seq(0,nrow(df),3),-c(1,2)])
Station1 Station2 Station3 Station4
38.5 49.0 38.0 31.0
数据:
df<-structure(list(row.names = c("01.01.2017", "01.01.2017", "01.01.2017",
"02.01.2017", "02.01.2017", "02.01.2017"), Time = c("07:00",
"14:00", "21:00", "07:00", "14:00", "21:00"), Station1 = c(27L,
22L, 41L, 22L, 20L, 36L), Station2 = c(38L, 49L, 53L, 38L, 54L,
45L), Station3 = c(26L, 25L, 46L, 26L, 35L, 30L), Station4 = c(25L,
16L, 36L, 19L, 13L, 26L)), class = "data.frame", row.names = c(NA,
-6L))
答案 1 :(得分:2)
可能您需要类似的东西
library(dplyr)
df %>%
group_by(group = gl(n()/3, 3)) %>%
summarise_at(-1, mean, na.rm = TRUE)
# group Station1 Station2 Station3 Station4
# <fct> <dbl> <dbl> <dbl> <dbl>
#1 1 30 46.7 32.3 25.7
#2 2 26 45.7 30.3 19.3