2015-10-28 5 views
1

У меня есть два data.frame, и я хочу разделить их по элементам. Если последний имеет 0-записей, результат деления должен быть 0. Есть ли у вас какой-либо совет о том, как его легко реализовать? Здесь df1 делится на df2 получение res.Разделение двух элементов data.frame по элементу с 0 записями

df1 <- data.frame(a=c(1,4,0),b=c(6,1,2),c=c(0,2,0)) 
df2 <- data.frame(a=c(0,2,0),b=c(2,1,0),c=c(1,2,6)) 

res <- data.frame(a=c(0,2,0),b=c(3,1,0),c=c(0,1,0)) 

ответ

2

Разделим «DF1» на «df2», а затем replace «NaN» и значения «» Inf в каждом столбце по 0 с помощью цикла столбцов с помощью lapply.

res1 <- df1/df2 
res1[] <- lapply(res1, function(x) replace(x, is.infinite(x)|is.nan(x), 0)) 

Или это может быть сделано путем деления соответствующих столбцов 'df1', 'df2' и заменяя 'NaN', 'Inf' в пределах Map

data.frame(Map(function(x, y) {x1 <- x/y 
      ifelse(is.nan(x1)|is.infinite(x1), 0, x1)}, df1, df2))