我认为我非常接近解决方案。 但不幸的是我没有得到它。
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 :(得分: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