2016-02-02 76 views
0

我认为我非常接近解决方案。 但不幸的是我不明白。替换某些列中的NA

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 
+0

@akrun:我认为这是一个不同的问题。您的链接仅清除了我的问题的一半,而不是仅在某些栏目中替换NAs的重要内容,而不是全部内容。 – SDahm

+0

好的,我重新打开它。 – akrun

回答

2

这里是mutate_each一个dplyr溶液。您可以使用与select()中使用的选择器相同的选择器将其限制到您想要的列。这里我使用ends_with

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

请注意,如果感兴趣的列是因素,则系数值将被它们的数字指数 – knowah

1

尝试

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