2017-10-07 3 views
1

Supposons que j'ai la matrice D qui consiste en des décomptes de décès par année selon l'âge.Comment ajouter plusieurs valeurs à data.frame sans boucle?

Je veux remplir cette matrice avec des décomptes de décès appropriés qui sont stockés dans vector Age, mais le code suivant me donne une mauvaise réponse. Comment dois-je écrire le code sans faire de boucle?

# Year and age grid for tables 
Years=c(2007:2017) 
Ages=c(60:70) 

#Data.frame of deaths 
D=data.frame(matrix(ncol=length(Years),nrow=length(Ages))); D[is.na(D)]=0 
colnames(D)=Years 
rownames(D)=Ages 

Age=c(60,61,62,65,65,65,68,69,60) 
year=2010 

D[as.character(Age),as.character(year)]<- 
D[as.character(Age),as.character(year)]+1 
D[,'2010'] # 1 1 1 0 0 1 0 0 1 1 0 
# Should be 2 1 1 0 0 3 0 0 1 1 0 

Répondre

0

Vous devez utiliser table

AgeTable = table(Age) 
D[names(AgeTable), as.character(year)] = AgeTable 
D[,'2010'] 
[1] 2 1 1 0 0 3 0 0 1 1 0 
+0

Cette solution work's pour ce problème. Mais j'ai besoin de la solution qui peut accumuler les colonnes de table précédentes. –

+0

@Sattel Eh bien, comment avez-vous les données stockées pour les années précédentes? Veuillez fournir des données qui nous permettent de répondre à votre problème réel. – G5W

+0

Supposons que j'ai une ligne de code comme ceci, et mes données sont. J'ai plusieurs répétitions d'âge pour chaque appel. Mais le code ne l'accumule pas. Données: https://drive.google.com/open?id=0BxtjNizJ0NDlWmdsb3NRVzhDUm8 PY [en tant que caractère (mort.après.bdénère $ Âge), en tant que caractère (année)] = (as.numeric (((died.after .bd $ Death-died.after.bd $ bd ) /365.25))+ PY [en tant que caractère (décédé.après.Bas $ Âge), en tant que caractère (année)]) –