首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择具有跨函数dplyr的连续列

如何选择具有跨函数dplyr的连续列
EN

Stack Overflow用户
提问于 2020-07-21 15:07:35
回答 1查看 403关注 0票数 2

我希望使用dplyr中的新的跨函数来选择连续的列,并将NA更改为0。但是,它不起作用。这似乎是一件非常简单的事情,所以可能是我错过了什么。

一个有用的例子:

代码语言:javascript
复制
> 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))

但是,如果尝试这些选项,我会得到一个错误:

代码语言:javascript
复制
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))

我不知道为什么这不管用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-21 15:15:56

across()中,有两个基本参数。第一个参数是要修改的列,而第二个参数是应该应用于列的函数。此外,不再需要vars()来选择变量。因此,正确的形式是:

代码语言:javascript
复制
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   1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63017541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档