我希望使用dplyr中的新的跨函数来选择连续的列,并将NA更改为0。但是,它不起作用。这似乎是一件非常简单的事情,所以可能是我错过了什么。
一个有用的例子:
> m <- matrix(sample(c(NA, 1:10), 100, replace = TRUE), 10)
> d <- as.data.frame(m)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 4 3 NA 3 7 6 6 10 6 5
2 9 8 9 5 10 NA 2 1 7 2
3 1 1 6 3 6 NA 1 4 1 6
4 NA 4 NA 7 10 2 NA 4 1 8
5 1 2 4 NA 2 6 2 6 7 4
6 NA 3 NA NA 10 2 1 10 8 4
7 4 4 9 10 9 8 9 4 10 NA
8 5 8 3 2 1 4 5 9 4 7
9 3 9 10 1 9 9 10 5 3 3
10 4 2 2 5 NA 9 7 2 5 5这样做很好:
mutate_at(vars(V1:V4), ~replace(., is.na(.), 0))
但是,如果尝试这些选项,我会得到一个错误:
d %>% mutate(across(vars(V1:V4)), ~replace(., is.na(.), 0))
d %>% mutate(across(V1:V4)), ~replace(., is.na(.), 0))
d %>% mutate(across("V1":"V4")), ~replace(., is.na(.), 0))我不知道为什么这不管用
发布于 2020-07-21 15:15:56
在across()中,有两个基本参数。第一个参数是要修改的列,而第二个参数是应该应用于列的函数。此外,不再需要vars()来选择变量。因此,正确的形式是:
d %>%
mutate(across(V1:V4, ~ replace(., is.na(.), 0)))
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 2 6 0 6 5 6 10 5 3 1
2 2 9 2 4 10 6 9 4 NA NA
3 5 5 3 0 3 7 1 5 9 5
4 7 1 1 6 2 1 8 NA 8 4
5 3 5 3 0 2 3 4 2 3 NA
6 0 10 0 2 5 10 1 10 4 3
7 4 3 10 6 NA 5 9 3 3 9
8 9 9 8 5 8 1 3 1 NA 10
9 6 3 0 1 1 9 3 5 8 4
10 3 2 9 1 5 2 4 NA 6 1https://stackoverflow.com/questions/63017541
复制相似问题