2016-01-28 5 views
0

У меня есть несколько, казалось бы, простая проблема, с которой я столкнулся. У меня есть Д.Ф., говорят:заменить значения в одном наборе данных со значениями в другом наборе данных R

x y z 
0 1 2 
3 5 4 
1 0 5 
0 5 0 

и другое:

x y z 
1 5 6 
2 4 5 
4 5 7 
5 8 5 

Я хочу, чтобы заменить нулевые значения в df1 со значением в df2. Например, ячейка 1 df1 будет равна 1 вместо нуля. Я хочу это для всех столбцов в фрейме данных. Можете ли вы мне помочь? Кажется, я не понимаю. Благодаря!

ответ

1

Во-первых, вы можете найти индексы 0, используя which

zero_locations <- which(df1 == 0, arr.ind=TRUE) 

Затем вы можете использовать места, чтобы произвести замену:

df1[zero_locations] <- df2[zero_locations] 

Как Дэвид Arenburg отметил в комментариях, which не является обязательным:

zero_locations <- df1 == 0 

Будет работать.

+0

не уверен, что вам нужно 'which' for, почему не просто' zero_locations <- df1 == 0'? –

+0

@DavidArenburg вы правы, это необязательно. Первоначально я думал, что использование 'which' будет более эффективным решением для памяти, чем создание логической матрицы с теми же размерами, что и исходный кадр данных, но это только верно и значительно, когда кадр данных является большим и относительно мало нулей. – Jota

+0

Если это было так, то, вероятно, вы правы. –

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