小编Ear*_*ien的帖子

在 R 中使用 across() 创建多个新列

我的问题和现有问题之间的区别在于,我想创建mutate依赖于现有列的新列。

一些虚拟数据:

library(dplyr)
dat <- tibble(
    a = 1:5,
    b = LETTERS[1:5]
)
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样一一创建新列

dat <- dat %>%
    mutate(foo = NA, bar = NA, bar2 = NA)
Run Code Online (Sandbox Code Playgroud)

我可以使用更方便地修改across,例如:

new_vars <- c("foo", "bar", "bar2")
dat <- dat %>%
    mutate(across(all_of(new_vars), ~ replace(., is.na(.), 0)))
Run Code Online (Sandbox Code Playgroud)

但是,如何在不以类似方式引用现有列的情况下创建新列呢?例如添加新列填充NA

tibble(
    a = 1:5,
    b = LETTERS[1:5]
) %>% 
    # mutate(across(all_of(new_vars), ~ function(.x) NA))  # Error
    mutate(across(all_of(new_vars), NA))                   # Error
Run Code Online (Sandbox Code Playgroud)

对任何tidyverse替代方案持开放态度。

r dplyr mutate tibble across

3
推荐指数
1
解决办法
228
查看次数

变异/过滤与另一个数据框同名的列

我想做这样的事情(一个愚蠢的代表):

iris %>%
    mutate(mtcars = Sepal.Length * 7) %>%
    filter(mtcars < max(mtcars$mpg))
Run Code Online (Sandbox Code Playgroud)

其中第一个mtcars引用 中的列iris,而第二个mtcars引用外部 data.frame。

我意识到我可以预先计算max(mtcars$mpg)或简单地重新标记 data.frame,但我想知道是否有一种方法可以在原位显式区分两者?例如:

iris %>%
    mutate(mtcars = Sepal.Length * 7) %>%
    filter(`mtcars` < max(EXTERNAL::mtcars$mpg))
#              ^                        ^
#            column               Not a column
Run Code Online (Sandbox Code Playgroud)

r calculated-columns tidyverse

3
推荐指数
3
解决办法
136
查看次数

标签 统计

r ×2

across ×1

calculated-columns ×1

dplyr ×1

mutate ×1

tibble ×1

tidyverse ×1