我知道关于如何做这类事情有很多问题和答案,但问题是我知道如何从列子集计算新列,只是不知道如何执行我需要的特定操作
玩具数据
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