r - 在新列中获取所有 NA [变异]
问题描述
我需要创建一个新列,它是两个或三个其他列的函数,其中一个包含一些缺失的数据 (NA)。但是,当我使用dplyr
'smutate
函数时,新列包含所有 NA。
请参见下面的示例:
rand_df <- data.frame(replicate(10,sample(0:10,200,rep=TRUE))) # random df
names(rand_df) <- letters[seq(from=1, to=10)] #renaming header
rand_df$c[2:20] <- NA # introducing NAs
head(rand_df)
a b c d e f g h i j
1 3 1 8 2 4 3 1 9 2 9
2 6 1 NA 1 2 8 8 6 0 9
3 5 7 NA 2 4 1 7 7 3 0
4 10 8 NA 6 6 7 0 2 2 0
5 4 1 NA 9 3 8 2 2 5 2
6 10 8 NA 3 10 2 10 4 5 5
试图创建一个新列
rand_df <- rand_df %>% mutate(k = 141 * min((c/88.42), 1))
head(rand_df):
a b c d e f g h i j k
1 3 1 8 2 4 3 1 9 2 9 NA
2 6 1 NA 1 2 8 8 6 0 9 NA
3 5 7 NA 2 4 1 7 7 3 0 NA
4 10 8 NA 6 6 7 0 2 2 0 NA
5 4 1 NA 9 3 8 2 2 5 2 NA
6 10 8 NA 3 10 2 10 4 5 5 NA
我知道我可以简单地使用 for 循环单独循环遍历行并跳过包含 NA 的行,但我想认为有更好的方法来做到这一点。
解决方案
你可以使用 pmin()。
library(dplyr)
rand_df <- data.frame(replicate(10,sample(0:10,200,rep=TRUE))) # random df
names(rand_df) <- letters[seq(from=1, to=10)] #renaming header
rand_df$c[2:20] <- NA # introducing NAs
head(rand_df)
#> a b c d e f g h i j
#> 1 4 9 9 6 10 2 1 10 10 10
#> 2 7 3 NA 2 5 9 1 2 10 6
#> 3 0 3 NA 4 5 6 1 0 10 6
#> 4 0 7 NA 5 3 6 6 9 4 7
#> 5 4 4 NA 5 4 10 8 5 6 0
#> 6 1 3 NA 3 0 10 1 3 7 4
rand_df <- rand_df %>% mutate(k = 141 * pmin((c/88.42), 1))
head(rand_df)
#> a b c d e f g h i j k
#> 1 4 9 9 6 10 2 1 10 10 10 14.35196
#> 2 7 3 NA 2 5 9 1 2 10 6 NA
#> 3 0 3 NA 4 5 6 1 0 10 6 NA
#> 4 0 7 NA 5 3 6 6 9 4 7 NA
#> 5 4 4 NA 5 4 10 8 5 6 0 NA
#> 6 1 3 NA 3 0 10 1 3 7 4 NA
<sup>Created on 2020-08-17 by the [reprex package](https://reprex.tidyverse.org) (v0.3.0)</sup>
推荐阅读
- angular - Appsync 客户端对 GraphQL 突变的 Angular 订阅
- api - 过滤时列表视图重新加载
- ruby-on-rails - 无法使用编辑/更新按钮在 Rails 中编辑视频
- android - Android shell 用户无权访问 /data/local/tmp,即使它是该文件夹的所有者
- powershell - Ansible 剧本,我如何运行 Powershell 脚本*带参数*
- git - GIT:在本地文件与远程文件比较期间禁用 eol 检查
- powerapps - 可以借助按钮在外部选择图库中的项目吗?
- python-3.x - 创建一个优雅的解决方案来避免 HTTPServiceUnavailable
- java - 将 SSL 用于 Apache 和 Spring 引导项目
- javascript - SVG.js bbox 问题和定位问题