【发布时间】:2020-11-11 00:17:47
【问题描述】:
我想使用 dplyr 中的新 cross 函数来选择连续的列并将 NA 更改为零。但是,它不起作用。这似乎是一件非常简单的事情,所以可能是我错过了什么。
一个工作示例:
> 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))
我不知道为什么这不起作用
【问题讨论】:
-
你很接近,只是括号不正确:
d %>% mutate(across(V1:V4, ~ replace(., is.na(.), 0)))。 -
哦,它在cross函数内部,我不清楚。感谢您的帮助,您可以将其发布为答案。
-
另请注意,tidyr 提供
replace_na。