J'ai des informations date/heure où je veux obtenir la moyenne, min, max, gamme des dates à travers "saisons" regroupées par années et la seule façon J'ai été légèrement réussi de faire ceci est avec tapply. La plus proche est la fonction de résumé dans tapply. Les résultats sont ce que je suppose est une liste par année de la min, max, 1er Qu, médiane etc. Ce ne sont pas exactement ce dont j'ai besoin, mais fonctionne bien.r combiner les résultats de tapply en utilisant do.call (rbind) ou ddply
Exemple de résultats que je reçois de la fonction tapply de 1 saison:
$`2003`
Min. 1st Qu. Median Mean 3rd Qu. Max.
"2003-04-22 00:00:00 UTC" "2003-05-03 00:00:00 UTC" "2003-05-12 00:00:00 UTC" "2003-05-10 02:00:00 UTC" "2003-05-18 00:00:00 UTC" "2003-05-21 00:00:00 UTC"
$`2004`
Min. 1st Qu. Median Mean 3rd Qu. Max.
"2004-04-07 00:00:00 UTC" "2004-04-13 00:00:00 UTC" "2004-05-10 00:00:00 UTC" "2004-05-01 07:08:56 UTC" "2004-05-11 12:00:00 UTC" "2004-05-20 00:00:00 UTC"
Ce que je veux faire est de combiner ces listes I générons pour les différentes saisons dans un grand heureux dataframe que je peux exporter dans un fichier CSV . J'ai cherché et cherché et devient encore plus confus. La plupart des gens suggèrent que le plus simple est
test = do.call(rbind, sSM, eSM, sC) #note here sSM, eSM, sC are my "seasons"
Cependant, cela me donne un message d'erreur ou une trame "test" vide. J'ai lu au sujet du paquetage de plyr et ai supposé que ddply au lieu du tapply pour forcer le résultat dans un dataframe devrait fonctionner, mais je ne peux pas comprendre comment faire fonctionner cela même parce que je ne peux pas l'obtenir à faire les fonctions dont je aurais besoin, comme la moyenne, min, max, & gamme ...
le résultat final, je voudrais quelque chose comme:
Season Year Min Max Mean Median
sSM 2003 2003-04-21 2003-5-1 2003-4-25 2003-4-23
eSM 2003...
sSM 2004...
eSM 2004...
alors je voudrais faire la même chose exacte , seulement déterminer au sein de l'individu à travers les années. J'ai un champ ID dans lequel, depuis quelques années, le même individu a été mesuré. Je voudrais obtenir une date de début moyenne pour cette personne à travers les années au sein de chaque saison. Laissant de côté les personnes qui n'ont pas été mesurées sur plusieurs années.
Comme je ne comprends pas comment manipuler les listes et les tableaux et même ce que fait tapply je ne sais pas comment réparer tout cela. Est-ce que je crée un dataframe vide et y mets tout ce truc dans une boucle ou quelque chose? Voici quelques exemples de données provenant de 4 «saisons» sur une période de quelques années. Certaines dates ont la date et l'heure et d'autres ont juste la date.
structure(list(Year = c(2003L, 2003L, 2003L, 2003L, 2003L, 2003L,
2003L, 2004L, 2004L, 2004L, 2004L, 2004L, 2004L, 2005L, 2005L,
2005L, 2005L, 2005L, 2005L, 2006L, 2006L, 2006L, 2006L), ID = structure(c(11L,
12L, 13L, 14L, 15L, 16L, 17L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L,
9L, 10L, 14L, 15L, 1L, 2L, 3L, 6L), .Label = c("c_002", "c_102",
"c_104", "c_105", "c_109", "c_401", "c_9814", "c_9815", "c_9816",
"c_9819", "c_9901", "c_9902", "c_9905", "c_9908", "c_9911", "c_9912",
"c_9916"), class = "factor"), sSM = structure(c(10L, 10L, 9L,
17L, 8L, 8L, 7L, 18L, NA, 1L, NA, 15L, 13L, 12L, 6L, 3L, 5L,
2L, 4L, 16L, 14L, 11L, 11L), .Label = c("04/07/2004 15:00", "04/23/2005 10:01",
"04/25/2005 03:01", "04/27/2005 02:00", "04/27/2005 08:00", "04/29/2005 04:00",
"05/01/2003", "05/03/2003", "05/04/2003", "05/05/2003", "05/05/2006",
"05/07/2005 16:01", "05/11/2004 11:00", "05/11/2006", "05/13/2004 08:00",
"05/14/2006", "05/17/2003", "05/17/2004 12:02"), class = "factor"),
eSM = structure(c(13L, 18L, 15L, 21L, 16L, 10L, 14L, 20L,
NA, 1L, NA, 11L, 7L, 5L, 6L, 17L, 3L, 2L, 4L, 19L, 9L, 12L,
8L), .Label = c("04/27/2004 05:00", "05/01/2005 05:00", "05/06/2005 05:00",
"05/08/2005 07:01", "05/12/2005 21:00", "05/15/2005 19:00",
"05/18/2004 13:00", "05/18/2006", "05/20/2006", "05/21/2003",
"05/21/2004 01:01", "05/23/2006", "05/24/2003", "05/25/2003",
"05/26/2003", "05/27/2003", "05/27/2005 01:00", "05/28/2003",
"05/28/2006", "06/01/2004 02:01", "06/03/2003"), class = "factor"),
sC = structure(c(9L, 12L, 16L, 19L, 18L, 12L, 7L, 13L, NA,
10L, NA, 20L, 4L, 14L, 11L, 5L, 1L, 2L, 3L, 8L, 17L, 6L,
15L), .Label = c("05/26/2005 00:00", "05/26/2005 10:00",
"05/27/2005 06:01", "05/28/2004 08:00", "05/29/2005 23:01",
"05/29/2006", "05/30/2003", "05/30/2006", "05/31/2003", "05/31/2004 06:01",
"05/31/2005 15:00", "06/01/2003", "06/01/2004 07:02", "06/01/2005 16:00",
"06/01/2006", "06/03/2003", "06/03/2006", "06/04/2003", "06/05/2003",
"06/05/2004 01:00"), class = "factor"), eC = structure(c(11L,
2L, 15L, 6L, 17L, 17L, 2L, 8L, NA, 7L, NA, 13L, 5L, 9L, 9L,
3L, 10L, 1L, 4L, 12L, 14L, 16L, 12L), .Label = c("06/03/2005 18:00",
"06/04/2003", "06/04/2005 04:01", "06/05/2005 05:01", "06/06/2004 22:00",
"06/07/2003", "06/07/2004 23:00", "06/08/2004 19:01", "06/08/2005 03:00",
"06/10/2005 20:00", "06/12/2003", "06/13/2006", "06/14/2004 00:00",
"06/14/2006", "06/16/2003", "06/18/2006", "06/19/2003"), class = "factor")), .Names = c("Year",
"ID", "sSM", "eSM", "sC", "eC"), class = "data.frame", row.names = c(NA,
-23L))
Voici un code Ive écrit jusqu'à présent:
dates$StartSM = as.POSIXct(strptime(dates$sSM,"%m/%d/%Y",tz="UTC"),tz="UTC")
dates$EndSM = as.POSIXct(strptime(dates$eSM,"%m/%d/%Y",tz="UTC"),tz="UTC")
dates$EndC = as.POSIXct(strptime(dates$eC,"%m/%d/%Y %H:%M",tz="UTC"),tz="UTC")
dates$StartC = as.POSIXct(strptime(dates$sC,"%m/%d/%Y %H:%M",tz="UTC"),tz="UTC")
sSpringM = tapply(dates$StartSM, dates$Year, summary)
eSpringM = tapply(dates$EndSM, dates$Year, summary)
sCalving = as.vector(tapply(dates$StartC, dates$Year, summary))
eCalving = tapply(dates$EndC, dates$Year, summary)
datadates = do.call(rbind, sSpringM, eSpringM, sCalving)
Pouvez-vous remplacer la version lisible par l'homme de vos données par la sortie de 'dput (youDataGoesHere)'? Il sera beaucoup plus facile de s'assurer que la solution développée fonctionne pour vous puisque les types de données et autres correspondront exactement. – Chase
@Chase, désolé - j'ai commencé à le faire, mais alors ne devine pas ... il est toujours préférable de l'ajouter. Je pensais juste que la question devenait trop longue.Je veux juste que les gens sachent que j'ai essayé de trouver quelque chose et de faire une tentative. – Kerry
Pas de soucis - Je trouve 'dput()' particulièrement utile lorsque les formats date/heure sont impliqués ... les différences semblent être source de beaucoup de confusion. Je suis toujours confus quant à la façon dont vous définissez le printemps et l'été? Est-ce que les colonnes 'sSM',' eSM', 'eC',' sC' ont une valeur quelconque après les avoir converties aux formats d'heure appropriés? – Chase