Я просмотрел несколько ответов на Stackoverflow, но все еще не смог решить свою проблему. Я сделал функцию, которая работает, но я кое-что добавил, и теперь она больше не будет работать. Я хочу заменить все NA на 0, что мне кажется простым.
Это моя функция, и я добавил bframe[is.na(bframe)] <- 0
:
B <- function(frame1, frame2, column){
bframe <- merge(frame 1, frame2, by = column, all = TRUE)
bframe$result <- bframe$freq.x - bframe$freq.y
bframe$percentage <- (bframe$result/bframe$freq.y)*100
bframe[is.na(bframe)] <- 0
return(bframe)
}
B(DT2_1, 2_1, "BurgS")
Однако выдает эту ошибку: Error in '[<-.data.frame'('* tmp *, thisvar, value = 0) : duplicate subscripts for columns
.
Ошибка возникает из-за того, что есть NA, и он не может выполнить вычисления:
BurgS freq.x freq.y result percentage percentageABS
1 9204 184042 -174838 -94.99897 94.99897
2 150 3034 -2884 -95.05603 95.05603
3 130 2602 -2472 -95.00384 95.00384
98 NA 47 NA NA NA
Не каждый фрейм данных имеет такую структуру, поэтому я ищу решение, которое изменяет NA в наборе данных целом . Кто-нибудь может мне помочь?
Изменено 26/6/2018: я сам нашел решение проблемы. Код выглядит следующим образом, поэтому NA
из freq.x
изменяется на 0 и все еще может быть частью вычислений, результат которых показан в последних трех столбцах:
B <- function(frame1, frame2, column){
bframe$freq.x[is.na(bframe$freq.x)] <- 0
bframe <- merge(frame 1, frame2, by = column, all = TRUE)
bframe$result <- bframe$freq.x - bframe$freq.y
bframe$percentage <- (bframe$result/bframe$freq.y)*100
return(bframe)
}
B(DT2_1, 2_1, "BurgS")