我在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
的{{1}}更改为0,并且仍然可以作为计算的一部分,其结果显示在最后三列中:
freq.x
答案 0 :(得分:0)
我遇到了同样的错误,并找到了另一个解决方案。
代替:
bframe[is.na(bframe)] <- 0
尝试在 is.na 函数后添加逗号:
bframe[is.na(bframe), ] <- 0
这对我来说非常有效!