我知道关于如何做这类事情有很多问题和答案,但问题是我知道如何从列子集计算新列,只是不知道如何执行我需要的特定操作

玩具数据

d <- data.frame(v1 = c(NA, 1, NA),
                v2 = c(1, 2, NA),
                v3 = c(NA, 1, NA),
                v4 = c(1, 2, 3))
d

# output
  v1 v2 v3 v4
1 NA  1 NA  1
2  1  2  1  2
3 NA NA NA  3

现在假设我想创建一个新的变量,它给出了从V1列到V3列的总和.使用新的dplyr函数rowwise()across()非常简单

d %>%
  rowwise() %>% 
    mutate(sum = sum(c_across(v1:v3)))

# A tibble: 3 × 5
# Rowwise: 
     v1    v2    v3    v4   sum
  <dbl> <dbl> <dbl> <dbl> <dbl>
1    NA     1    NA     1    NA
2     1     2     1     2     4
3    NA    NA    NA     3    NA

所以求和函数起作用了.但是我想创建一个布尔变量,它告诉我第v1行到第v3行是否完全由Nas组成.我以为这能行得通

d %>%
  rowwise()
    mutate(anyEntries = all(is.na(c_across(v1:v3))))

但它会抛出以下错误

Error in `c_across()`:
! Must be used inside dplyr verbs.

我感到困惑,因为该函数对一个简单的向量起作用

all(is.na(c(NA, NA, NA)))
# [1] TRUE

all(is.na(c(NA, 1, NA)))
# [1] FALSE

我是不是把c_across放错地方了?

我测试了Whe

推荐答案

baseR%的解决方案对您来说是一个选项吗?如果是这样的话,我建议使用apply对每一行分别计算all(is.na(x))

v1v3 <- c("v1", "v2", "v3")
d$Rsums <- rowSums(d[v1v3]) # na.rm = TRUE ?
d$allNA <- apply(d[v1v3], 1, function(x) all(is.na(x)))

赠送

> d
  v1 v2 v3 v4 Rsums allNA
1 NA  1 NA  1    NA FALSE
2  1  2  1  2     4 FALSE
3 NA NA NA  3    NA  TRUE

R相关问答推荐

如何根据R中其他列的值有条件地从列中提取数据?

可以替代与NSE一起使用的‘any_of()’吗?

如何使用tryCatch执行语句并忽略警告?

将二进制数据库转换为频率表

随机森林的带Shap值的蜂群图

将列的值乘以在不同数据集中找到的值

防止正则表达式覆盖以前的语句

Conditional documentr::R中数据帧的summarize()

随机 Select 的非NA列的行均数

对R中的列表列执行ROW Mean操作

为什么不能使用lApply在包装函数中调用子集

如何在shiny 的应用程序 map 视图宣传单中可视化单点

策略表单连接两个非常大的箭头数据集,而不会 destruct 内存使用

R dplyr::带有名称注入(LHS of:=)的函数,稍后在:=的RHS上引用

使用grepl过滤特定列范围内的列名

基于日期输入的子集数据集,其中应包括NAS作为 Select

文本标签 colored颜色 与FiveThirty8主题不匹配

Echarts4rBox函数似乎无法识别变量

从组中随机 Select 值序列

如何在Ubuntu上更改R中的区域设置