2015-03-13 4 views
1

У меня есть набор данных, который выглядит как:Recode переменные R

x1=c(0,2,1,3,0) 
x2=c(3,2,0,0,1) 
x3=c(0,2,1,0,0) 
d=cbind(x1,x2,x3) 

, и я хотел бы заменить 0 'в x1 и x2 с 4 (за исключением х3), так что данные данных выглядит следующим образом:

> d 
    x1 x2 x3 
[1,] 4 3 0 
[2,] 2 2 2 
[3,] 1 4 1 
[4,] 3 4 0 
[5,] 4 1 0 

Как это сделать в базовом пакете?

+4

'd [, 1: 2] [d [, 1: 2] == 0] <- 4' –

ответ

0

Существует несколько способов сделать это. Вот один из них:

d[,1:2][d[,1:2]==0] <- 4 

Первые квадратные скобки указывают R, чтобы применить операцию на первом и втором столбцах. Во вторых скобках указано условие R (где первый или второй столбец равен «0»). Ну и за стрелкой у вас есть новое значение, которое вы хотите присвоить элементам, которые соответствуют условию.

С технической точки зрения, часть d[,1:2]==0 создает булевую матрицу (с двумя столбцами), где записи TRUE, когда соответствующее поле в d равно «0». Затем эта булева матрица применяется к первым двум столбцам d в качестве логического индекса для присвоения 4.

Смежные вопросы