在R中将NA设置为0
在将一个数据帧与另一个im合并后,为偶尔的行留下随机NA。我想将这些NA设置为0,以便我可以使用它们执行计算 我正试图通过以下方式实现这一点:在R中将NA设置为0,r,R,在将一个数据帧与另一个im合并后,为偶尔的行留下随机NA。我想将这些NA设置为0,以便我可以使用它们执行计算 我正试图通过以下方式实现这一点: 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 = 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当然是另一列,但这似乎不起作用。您可以使用
is.na
的输出直接替换为子集:
bothbeams.data[is.na(bothbeams.data)] <- 0
bothbeams.data[is.na(bothbeams.data)]要添加到James的示例中,在对包含数据帧的na执行计算时,似乎总是必须创建一个中间层
例如,将数据帧中的两列(A和B)添加到一起dfr
:
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')
temp.df为什么不试试这个
na.zero <- function (x) {
x[is.na(x)] <- 0
return(x)
}
na.zero(df)
na.zero使用mutate_all
fromdplyr
的解决方案,以防您想将其添加到dplyr
管道中:
library(dplyr)
df %>%
mutate_all(funs(ifelse(is.na(.), 0, .)))
结果:
A B C
1 0 0 0
2 1 0 0
3 2 0 2
4 3 0 5
5 0 0 2
6 0 0 1
7 1 0 1
8 2 0 5
9 3 0 2
10 0 0 4
11 0 0 3
12 1 0 5
13 2 0 5
14 3 0 0
15 0 0 1
A B C
1 0 0 0
2 1 <NA> 0
3 2 0 2
4 3 <NA> 5
5 0 0 2
6 0 <NA> 1
7 1 0 1
8 2 <NA> 5
9 3 0 2
10 0 <NA> 4
11 0 0 3
12 1 <NA> 5
13 2 0 5
14 3 <NA> 0
15 0 0 1
set.seed(123)
df <- data.frame(A=rep(c(0:3, NA), 3),
B=rep(c("0", NA), length.out = 15),
C=sample(c(0:5, NA), 15, replace = TRUE))
如果在任何情况下,您只想替换数值列中的NA,我认为在建模中可能会出现这种情况,您可以使用mutate\u If
:
library(dplyr)
df %>%
mutate_if(is.numeric, funs(ifelse(is.na(.), 0, .)))
或在R基中:
replace(is.na(df), 0)
结果:
A B C
1 0 0 0
2 1 0 0
3 2 0 2
4 3 0 5
5 0 0 2
6 0 0 1
7 1 0 1
8 2 0 5
9 3 0 2
10 0 0 4
11 0 0 3
12 1 0 5
13 2 0 5
14 3 0 0
15 0 0 1
A B C
1 0 0 0
2 1 <NA> 0
3 2 0 2
4 3 <NA> 5
5 0 0 2
6 0 <NA> 1
7 1 0 1
8 2 <NA> 5
9 3 0 2
10 0 <NA> 4
11 0 0 3
12 1 <NA> 5
13 2 0 5
14 3 <NA> 0
15 0 0 1
set.seed(123)
df <- data.frame(A=rep(c(0:3, NA), 3),
B=rep(c("0", NA), length.out = 15),
C=sample(c(0:5, NA), 15, replace = TRUE))
数据:
A B C
1 0 0 0
2 1 0 0
3 2 0 2
4 3 0 5
5 0 0 2
6 0 0 1
7 1 0 1
8 2 0 5
9 3 0 2
10 0 0 4
11 0 0 3
12 1 0 5
13 2 0 5
14 3 0 0
15 0 0 1
A B C
1 0 0 0
2 1 <NA> 0
3 2 0 2
4 3 <NA> 5
5 0 0 2
6 0 <NA> 1
7 1 0 1
8 2 <NA> 5
9 3 0 2
10 0 <NA> 4
11 0 0 3
12 1 <NA> 5
13 2 0 5
14 3 <NA> 0
15 0 0 1
set.seed(123)
df <- data.frame(A=rep(c(0:3, NA), 3),
B=rep(c("0", NA), length.out = 15),
C=sample(c(0:5, NA), 15, replace = TRUE))
set.seed(123)
df您可以使用replace_na()
fromtidyr
软件包
df%>%替换(列表(第1列=0,第2列=0)