2015-01-27 3 views
0

У меня есть dataframe с двумя столбцами. Я хочу добавить новый colume в df, где все значения находятся внутри, были ли данные, соответствующие совпадению с первым colume.Сравните два столбца данных и добавьте их в dataframe

Я пробовал:

df<-data.frame(A=c("1","test","2","3",NA,"Test", NA),B=c("1","No Match","No Match","3",NA,"Test", "No Match")) 

df[df$A == df$B ] 

Однако, я получаю:

Error in Ops.factor(df$A, df$B) : level sets of factors are different  

Любой recommednation, что я делаю не так?

ответ

1

Работа с NA первым, а затем добавить столбец:

> df[is.na(df)]="" 
> df$New = with(df, A==B) 
> df 
    A  B New 
1 1  1 TRUE 
2 test No Match FALSE 
3 2 No Match FALSE 
4 3  3 TRUE 
5    TRUE 
6 Test  Test TRUE 
7  No Match FALSE 

Или удалить NA от вашего первоначального data.frame с df = df[complete.cases(df),], а затем добавить столбец.

Если вы действительно хотите иметь False, когда есть NA в A или столбец B:

> transform(df, New=ifelse(is.na(A)|is.na(B), FALSE, df$A==df$B)) 
    A  B New 
1 1  1 TRUE 
2 test No Match FALSE 
3 2 No Match FALSE 
4 3  3 TRUE 
5 <NA>  <NA> FALSE 
6 Test  Test TRUE 
7 <NA> No Match FALSE 
+0

Thx для нашего ответа! Я бы сделал, если его NA, то я делаю «ложь». Любой Как это может быть добавлено в эту секунду? – mrquad

+0

Используете ли вы тот же 'df', что и в примере? Он дает ошибку, как упоминалось в OP, или вы должны указать необходимость 'stringsAsFactors = FALSE' в' data.frame' – akrun

+0

Я использую тот же самый df. @mrquad, есть версия, касающаяся NA, если вы действительно этого хотите. –