2017-06-08 5 views
0

Mes données ont une variable pour l'âge de base, et une variable de suivi avec le nombre de mois depuis l'observation de base. Les deux sont des vecteurs numériques avec des nombres entiers seulement. Je veux calculer l'âge au suivi. Lorsque j'analyse ces variables pour les objets de période en utilisant lubrifier et les ajouter ensemble, j'obtiens des résultats comme 5 ans 14 mois. Idéalement, j'aimerais que ce soit 6 ans et 2 mois.Calculer l'âge en années et mois en ajoutant des objets de classe de période avec lubrifier dans R

Exemple

library(dplyr) 
library(lubridate) 
library(magrittr) 

set.seed(080617) 
df <- 
    tibble(year = sample(20), 
    month = sample(20)) 

df %<>% 
    mutate(year = years(year)) %>% 
    mutate(month = months(month)) %>% 
    mutate(age = (year + month)) 
df 

J'ai essayé d'utiliser df$age <- as.period(df$age, units = "years") en vain.

Des suggestions?

+0

Je suggère d'utiliser les opérateurs '% /%' et '' %% sur votre variable mois et utilisez 12 comme base. Par exemple '13% /% 12' équivaut à 1 et' 13 %% 12' équivaut également à 1, ce qui impliquerait 1 an et 1 mois. Vous devriez pouvoir les utiliser dans vos calculs de «année» et «mois». – brittenb

Répondre

1

Ceci devrait vous permettre d'obtenir le résultat que vous recherchez. J'ai changé les noms de colonnes pour year.col et month.col, pour le rendre plus facile à suivre la logique

library(dplyr) 
library(lubridate) 
library(magrittr) 

set.seed(080617) 
df <- 
    tibble(year.col = sample(20), 
     month.col = sample(20)) 

df %<>% 
    mutate(year.col = years(year.col)) %>% 
    mutate(month.col = months(month.col)) %>% 
    mutate(age = year.col + years(month(month.col) %/% 12) + months(month(month.col) %% 12)) 
+0

N'avait pas vu/utilisé la division entière ou modulo avant - très pratique! Cela fonctionne très bien pour l'exemple minimal. Malheureusement, lorsque j'applique à mes * données * réelles, j'obtiens l'erreur 'Erreur dans as.POSIXlt.numeric (x): 'origin' doit être fourni'. Le code est le même que ci-dessus avec seulement les noms de colonnes pertinents modifiés. Des idées? – daibhaidhhen

+0

En fait compris moi-même. J'ai aussi chargé les paquets 'mice' et' VIM'. Retirez-les et cela fonctionne bien. Pas sûr du choc réel mais bon - ça marche! – daibhaidhhen