2016-08-16 1 views
0

Par exemple,changer quelques lignes de data.frame, quand il y a 2 conditions logiques

Name <- c("Ben", "Dana", "Ben", "Ellen", "Ellen", "Ben", "Ben", "George") 
Date <- c(2016-12-02, 2015-03-03, 2014-05-03, 2010-05-05, 
      2016-02-02, 2015-03-04, 2014-05-08, 2010-06-05) 
Type <- c("ES pp", "ES pr", "ES pp", "LT pp", "LT pp", "ES pp", "LT pp", "LT pp") 
mydata <- data.frame(Name, Date, Type) 

Si mydata$Name=="Ben" & mydata$Type=="ES pp", je veux changer "ES pp"-"LT pr" par exemple. Quand j'appelle mydata la prochaine fois, je veux que ça reste toujours comme je l'ai changé.

Comment faire cela?

Répondre

1

La façon dont est écrit votre exemple mydata, Type est un facteur qui rend la solution plus difficile.

Supposons que vous ne vouliez pas dire que, et que Type n'est pas censé être un facteur:

mydata <- data.frame(Name, Date, Type, stringsAsFactors = FALSE) 

> mydata 
    Name Date Type 
1 Ben 2002 ES pp 
2 Dana 2009 ES pr 
3 Ben 2006 ES pp 
4 Ellen 2000 LT pp 
5 Ellen 2012 LT pp 
6 Ben 2008 ES pp 
7 Ben 2001 LT pp 
8 George 1999 LT pp 

Ensuite, vous pouvez utiliser votre condition pour indexer la variable dans la trame de données, et remplacez la valeur.

mydata$Type[mydata$Name == 'Ben' & mydata$Type == 'ES pp'] <- 'LT pr' 

> mydata 
Name Date Type 
1 Ben 2002 LT pr 
2 Dana 2009 ES pr 
3 Ben 2006 LT pr 
4 Ellen 2000 LT pp 
5 Ellen 2012 LT pp 
6 Ben 2008 LT pr 
7 Ben 2001 LT pp 
8 George 1999 LT pp 

Maintenant, si vous avez l'intention de Type être un facteur, alors vous avez le problème 'LT pr' n'est pas un de vos niveaux de facteur, au moins pas la façon dont votre exemple est écrit. Pour l'instant, je vais espérer que ce n'est pas ce que vous vouliez dire, parce que résoudre cela est beaucoup plus désordonné, et je pense que c'est une distraction du point de votre question.