Эффективный способ получить ежемесячные средства в нескольких столбцах в R - PullRequest
0 голосов
/ 08 октября 2019

У меня есть большой фрейм данных, упорядоченный по дате, с несколькими столбцами, такими как датчик, ферма, загон, индекс и т. Д. Я ищу эффективный способ получения ежемесячных средств по дате и конкретного загона. В настоящее время я отфильтровал столбец за столбцом, и после получения среднего значения за месяц сохраняю результат в кадре данных, чтобы в конце объединить каждый кадр данных из столбца в один.

r<-read.table(file = "clipboard", sep="\t",header=TRUE,na.strings = "NA",fill=TRUE)

> r
          date sensor granule_id client     farm      paddock index  mean       sd
1   2016-01-05     S2     T18GXA ecofos maitenes       maiz_2   PGR 83.20  3.44821
2   2016-01-05     S2     T18GXA ecofos maitenes       maiz_1   PGR 80.73  5.54963
3   2016-01-05     S2     T18GXA ecofos maitenes       peña_a   PGR 77.63  2.31232
4   2016-01-05     S2     T18GXA ecofos maitenes       peña_b   PGR 77.44  3.69589
5   2016-01-05     S2     T18GXA ecofos maitenes      patagua   PGR 76.77  9.61289
6   2016-01-05     S2     T18GXA ecofos maitenes       laurel   PGR 75.02  2.10570
7   2016-01-05     S2     T18GXA ecofos maitenes       pero_a   PGR 74.12  6.14028
8   2016-01-05     S2     T18GXA ecofos maitenes brazo_muerto   PGR 74.10  3.68202
9   2016-01-05     S2     T18GXA ecofos maitenes  las_piedras   PGR 71.20  6.75291
10  2016-01-05     S2     T18GXA ecofos maitenes      la_isla   PGR 67.52 11.96992

names(r)

unique(r$paddock)

r$date<-as.Date(as.character(r$date),"%d-%m-%Y")

el_pero_b<-r[r$paddock == 'el_pero_b',]
maiz_2<-r[r$paddock == 'maiz_2',]
los_bolos_b<-r[r$paddock == 'los_bolos_b',]
punta_estero<-r[r$paddock == 'punta_estero',]
maiz_1<-r[r$paddock == 'maiz_1',]
pero_a<-r[r$paddock == 'pero_a',]
patagua<-r[r$paddock == 'patagua',]
los_bolos_a<-r[r$paddock == 'los_bolos_a',]
brazo_muerto<-r[r$paddock == 'brazo_muerto',]
laurel<-r[r$paddock == 'laurel',]
peña_a<-r[r$paddock == 'peña_a',]
lado_estero<-r[r$paddock == 'lado_estero',]
peña_b<-r[r$paddock == 'peña_b',]
la_isla<-r[r$paddock == 'la_isla',]
las_piedras<-r[r$paddock == 'las_piedras',]

#1
el_pero_b_media<- xts(el_pero_b$mean, as.Date(as.character(el_pero_b$date),"%d-%m-%Y"))
#cob_sem<-na.locf(cob_sem, na.rm = T, fromLast = FALSE,maxgap=Inf)
el_pero_b_mensual = apply.monthly(el_pero_b,mean,na.rm=TRUE)
names(el_pero_b_mensual )<-"PGR"
el_pero_b_mensual <-data.frame(el_pero_b_mensual)
el_pero_b_mensual$Fecha <- rownames(el_pero_b_mensual)

#2
maiz_2_media<- xts(maiz_2$mean, as.Date(as.character(maiz_2$date),"%d-%m-%Y"))
#cob_sem<-na.locf(cob_sem, na.rm = T, fromLast = FALSE,maxgap=Inf)
maiz_2_mensual = apply.monthly(maiz_2_media,mean,na.rm=TRUE)
names(maiz_2_mensual )<-"PGR"
maiz_2_mensual <-data.frame(maiz_2_mensual)
maiz_2_mensual$Fecha <- rownames(maiz_2_mensual)

#3
los_bolos_b_media<- xts(los_bolos_b$mean, as.Date(as.character(los_bolos_b$date),"%d-%m-%Y"))
#cob_sem<-na.locf(cob_sem, na.rm = T, fromLast = FALSE,maxgap=Inf)
los_bolos_b_mensual = apply.monthly(los_bolos_b_media,mean,na.rm=TRUE)
names(los_bolos_b_mensual )<-"PGR"
los_bolos_b_mensual <-data.frame(los_bolos_b_mensual)
los_bolos_b_mensual$Fecha <- rownames(los_bolos_b_mensual)

1 Ответ

0 голосов
/ 08 октября 2019

Вероятно, вы ищете

aggregate(cbind(mean,sd)~month_year + paddock, 
    transform(df, month_year = format(as.Date(date), "%m-%Y")), mean, na.rm = TRUE)

, который дает mean для mean и sd столбца данных для каждого месяца и paddock.

In dplyr, мы можем сделать это

library(dplyr)
df %>%
  group_by(month_year = format(as.Date(date), "%m-%Y"), paddock) %>%
  summarise_at(vars(mean, sd), mean, na.rm = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...