替换某些列中的NA

时间:2016-02-02 10:10:15

标签: r

我认为我非常接近解决方案。 但不幸的是我没有得到它。

x1kb <- c(1:10, NA, NA, 5,6,7,8)
y1 <- rep(c(NA,777),each=8)
x2kb <- c(1:10, NA, NA, 5,6,7,8)
y2 <- rep(c(NA,777),each=8)
data1<- data.frame(x1kb, y1, x2kb, y2)

这是数据框的样子:

   x1kb  y1 x2kb  y2
1     1  NA    1  NA
2     2  NA    2  NA
3     3  NA    3  NA
4     4  NA    4  NA
5     5  NA    5  NA
6     6  NA    6  NA
7     7  NA    7  NA
8     8  NA    8  NA
9     9 777    9 777
10   10 777   10 777
11   NA 777   NA 777
12   NA 777   NA 777
13    5 777    5 777
14    6 777    6 777
15    7 777    7 777
16    8 777    8 777

我用dplyr试了一下。但我总是得到一个错误。

library(dplyr)
#replace NA with 0 if colname includes "kb"
data1[is.na(data1)] <- 0 %>% select(data1, contains("kb"))

我想要的输出:

   x1kb  y1 x2kb  y2
1     1  NA    1  NA
2     2  NA    2  NA
3     3  NA    3  NA
4     4  NA    4  NA
5     5  NA    5  NA
6     6  NA    6  NA
7     7  NA    7  NA
8     8  NA    8  NA
9     9 777    9 777
10   10 777   10 777
11    0 777    0 777
12    0 777    0 777
13    5 777    5 777
14    6 777    6 777
15    7 777    7 777
16    8 777    8 777

2 个答案:

答案 0 :(得分:2)

这是一个带有mutate_each的dplyr解决方案。您可以使用select()中使用的相同选择器将其限制为所需的列。在这里,我使用ends_with

data1 <- mutate_each(data1,funs=funs(ifelse(is.na(.),0,.)),ends_with("kb"))

答案 1 :(得分:1)

尝试

data1$x1kb[is.na(data1$x1kb)] <- 0
data1$x2kb[is.na(data1$x2kb)] <- 0