2016-02-02 74 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