r - Tidyverse Rowwise 可能存在或不存在的列的总和
问题描述
考虑以下小标题:
library(tidyverse)
data <- tibble(x = c(rnorm(5,2,n = 10)*1000,NA,1000),
y = c(rnorm(1,1,n = 10)*1000,NA,NA))
假设我想对“x”和“y”进行逐行求和,创建变量“z”,如下所示:
data %>%
rowwise() %>%
mutate(z = sum(c(x,y), na.rm = T))
这对我想要的效果很好,但问题是我的真实数据集有很多变量,我不想在我有什么变量之前检查我没有什么。所以,假设我可能有总和元素中不存在的变量:
data %>%
rowwise() %>%
mutate(k = sum(c(x,y,w), na.rm = T))
在这种情况下,它不会运行,因为列“w”不存在。我怎样才能让它运行,忽略“w”的不存在并对“x”和“y”求和?
PS:我更喜欢在运行总和之前不过滤数据集。无论变量是否存在,我都想以某种方式使总和发生。
解决方案
如果我正确理解了您的问题,这将是一个解决方案(对@Duck 的评论稍作修改:
library(tidyverse)
data <- tibble(x = c(rnorm(5,2,n = 10)*1000,NA,1000),
y = c(rnorm(1,1,n = 10)*1000,NA,NA),
a = c(rnorm(1,1,n = 10)*1000,NA,NA))
wishlist <- c("x","y","w")
data %>%
dplyr::rowwise() %>%
dplyr::mutate(Sum=sum(c_across(colnames(data)[colnames(data) %in% wishlist]),na.rm=T))
x y a Sum
<dbl> <dbl> <dbl> <dbl>
1 3496. 439. -47.7 3935.
2 6046. 460. 2419. 6506.
3 6364. 672. 1030. 7036.
4 1068. 1282. 2811. 2350.
5 2455. 990. 689. 3445.
6 6477. -612. -1509. 5865.
7 7623. 1554. 2828. 9177.
8 5120. 482. -765. 5602.
9 1547. 1328. 817. 2875.
10 5602. -1019. 695. 4582.
11 NA NA NA 0
12 1000 NA NA 1000
推荐阅读
- asp.net-core - 包 Microsoft.AspNetCore.Authentication.JwtBearer 5.0.0 与 netcoreapp3.1 不兼容,但它的目标是 net 5.0
- javascript - 表达如何将值从 .js 承诺传递到 .ejs 视图
- android - Android recycleview 将参数传递给同一活动中的另一个片段
- python - 如何删除 pyenv virtualenvs
- python - 如何在保留 dtype 的同时将 Pandas 数据框转换为字典?
- sql - 选择按其值连接的键
- python-3.x - 在没有问题偏移 Kivy 的情况下在散点图之前绘制
- django - 我在 django 中为两个不同的应用程序创建不同的用户身份验证时遇到问题
- r - R Shiny plotOutput 切断标签
- javascript - 您如何等待请求完成然后继续执行代码?