首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中将NA设置为0

在R中将NA设置为0
EN

Stack Overflow用户
提问于 2012-04-13 18:38:24
回答 4查看 134.8K关注 0票数 31

在将一个数据帧与另一个数据帧合并之后,im为偶尔的行留下了随机的NA。我想将这些NA设置为0,这样我就可以使用它们执行计算。

我正在尝试这样做:

代码语言:javascript
运行
复制
    bothbeams.data = within(bothbeams.data, {
      bothbeams.data$x.x = ifelse(is.na(bothbeams.data$x.x) == TRUE, 0, bothbeams.data$x.x)
      bothbeams.data$x.y = ifelse(is.na(bothbeams.data$x.y) == TRUE, 0, bothbeams.data$x.y)
    })

其中$x.x是一列,$x.y是另一列,但这似乎不起作用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-13 18:43:45

您可以只使用is.na的输出直接替换为子集:

代码语言:javascript
运行
复制
bothbeams.data[is.na(bothbeams.data)] <- 0

或者用一个可重现的例子:

代码语言:javascript
运行
复制
dfr <- data.frame(x=c(1:3,NA),y=c(NA,4:6))
dfr[is.na(dfr)] <- 0
dfr
  x y
1 1 0
2 2 4
3 3 5
4 0 6

但是,在包含也有缺失值的因子的数据框上使用此方法时要小心:

代码语言:javascript
运行
复制
> d <- data.frame(x = c(NA,2,3),y = c("a",NA,"c"))
> d[is.na(d)] <- 0
Warning message:
In `[<-.factor`(`*tmp*`, thisvar, value = 0) :
  invalid factor level, NA generated

它“有效”:

代码语言:javascript
运行
复制
> d
  x    y
1 0    a
2 2 <NA>
3 3    c

...but在这种情况下,您可能只想更改数值列,而不是整个数据框。例如,使用dplyr::mutate_if查看下面的答案。

票数 66
EN

Stack Overflow用户

发布于 2015-03-01 22:17:05

为了补充James的例子,在对包含NA的数据帧执行计算时,似乎总是必须创建一个中间层。

例如,将来自数据帧dfr的两列(A和B)添加在一起

代码语言:javascript
运行
复制
temp.df <- data.frame(dfr) # copy the original
temp.df[is.na(temp.df)] <- 0
dfr$C <- temp.df$A + temp.df$B # or any other calculation
remove('temp.df')

当我这样做的时候,我会在之后用remove/rm丢弃中间代码。

票数 1
EN

Stack Overflow用户

发布于 2021-04-20 01:04:20

您可以使用tidyr包中的replace_na()

df %>% replace_na(list(column1 = 0, column2 = 0)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10139284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档