2016-08-16 4 views
0

Например,изменить некоторые строки из data.frame, когда есть 2 логических условий

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) 

Если mydata$Name=="Ben" & mydata$Type=="ES pp", я хочу изменить "ES pp" к "LT pr", например. Когда я позвоню mydata в следующий раз, я хочу, чтобы он всегда оставался таким, каким я его изменил.

Как это сделать?

ответ

1

Как ваш пример mydata написан, Type - это фактор, который затрудняет решение.

Давайте предположим, что вы не имели в виду, что, и что Type не должно быть фактором:

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 

Затем вы можете использовать ваш условный индексировать переменную в кадре данных, и заменить значение.

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 

Теперь, если вы же предназначаются для Type быть фактором, то у вас есть проблема, что 'LT pr' не один из ваших уровней факторов, по крайней мере, не так, как ваш пример написан. Пока я собираюсь надеяться, что это не то, что вы имели в виду, потому что решение это намного беспощадно, и я думаю, что это отвлекает вас от вопроса вашего вопроса.