gpt4 book ai didi

r - 将 dplyr vars() 元素转换回字符

转载 作者:行者123 更新时间:2023-12-04 08:16:52 24 4
gpt4 key购买 nike

原始数据框:

df <- data.frame(col1=c("A", "B"), col2=c("C", "D"), stringsAsFactors=F)
df
col1 col2
1 A C
2 B D
使用 dplyr mutate_at ,假设我想替换列 col2 的所有值与列的名称,以获得:
df <- data.frame(col1=c("A", "B"), col2=c("col2", "col2"), stringsAsFactors=F)
df
col1 col2
1 A col2
2 B col2
例如,使用以下内容会触发错误:
df %>%
dplyr::mutate_at("col2", function(x){x=rlang::as_string(x)})
注意:此示例的重点不是替换列 col2 的所有值, 但要知道如何转换 vars(col2)向量回字符串 "col2" .
类似主题:
R dplyr mutate_at accessing colnames

最佳答案

dplyr::mutate_at无法访问列名称(在函数调用中仅使用其值),但我们可以使用 dplyr::across()dplyr::cur_column() :

library(dplyr)

df <- data.frame(col1=c("A", "B"), col2=c("C", "D"), stringsAsFactors=F)

df %>%
mutate(across(col2, ~ cur_column()))
#> col1 col2
#> 1 A col2
#> 2 B col2
创建于 2021-01-11 由 reprex package (v0.3.0)
而不是 across我们可以编写一个简单的函数,它可以使用列的名称和值(包括 tidyselect 助手):

library(tidyverse)
library(rlang)


create_vars <- function (.vars, .f) {
data <- dplyr::cur_data()
vars <- rlang::enexpr(.vars)
cols <- tidyselect::eval_select(vars, data)
f <- rlang::as_function(.f)

cols <- dplyr::select(data, dplyr::all_of(names(cols)))
new_tibble(imap(cols, f), nrow = nrow(data))
}

df <- data.frame(col1=c("A", "B"), col2=c("C", "D"), stringsAsFactors=F)

df %>% mutate(create_vars(starts_with("col"), ~ paste(.y, .x)))
#> col1 col2
#> 1 col1 A col2 C
#> 2 col1 B col2 D
创建于 2021-01-11 由 reprex package (v0.3.0)

关于r - 将 dplyr vars() 元素转换回字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65670349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com