2015-08-26 5 views
1

Предположим, у вас есть матрица, состоящая из двух столбцов только 1 и 2.R слияние с предпочтением

A B 
1 2 
2 2 
1 1 
2 1 
2 1 
2 2 
2 1 

Как бы вы объединили эти два столбца в один так, чтобы 2 всегда перезаписывал 1?

Желаемая Выход:

C 
2 
2 
1 
2 
2 
2 
2 
+0

Вам нужно объединить? Или создать новый столбец? – Heroka

+0

Я хотел бы создать новый столбец C – ALKI

+1

Это не слияние. Что вы уже пробовали? Обозначает ifelse-statement. – Heroka

ответ

4

Если предположить, что данные хранятся в dataframe имени df, вы можете использовать

df$C <- pmax(df$A, df$B) 

создать новый столбец C с желаемым результатом.

В случае матрицы m вы можете использовать

m <- cbind(m, pmax(m[,1], m[,2])) 
colnames(m) <- LETTERS[1:ncol(m)] 
#> m 
#  A B C 
#[1,] 1 2 2 
#[2,] 2 2 2 
#[3,] 1 1 1 
#[4,] 2 1 2 
#[5,] 2 1 2 
#[6,] 2 2 2 
#[7,] 2 1 2 
#> class(m) 
#[1] "matrix" 
+0

Вы проверили это? Он присваивает 2 всем значениям, так как 'max (df $ A, df $ B)' дает 2. – Heroka

+0

Спасибо за ответ! но я упоминаю в своем вопросе, что имею дело с матрицей – ALKI

+0

Вы правы. Я должен был использовать 'pmax' вместо' max'. Спасибо, что указали это, исправлено в редактировании. – RHertel

1

Без IfElse:

df$C <- apply(df[,c("A","B")],1,max) 

С IfElse:

df$C2 <- with(df, ifelse(A==1&B==1,1,2)) 

Результат

> df 
    A B C1 C2 
1 1 2 2 2 
2 2 2 2 2 
3 1 1 1 1 
4 2 1 2 2 
5 2 1 2 2 
6 2 2 2 2 
7 2 1 2 2 
Смежные вопросы