gpt4 book ai didi

r - 是否有比使用三重感叹号选择更强大的重命名替代方案?

转载 作者:行者123 更新时间:2023-12-04 09:41:15 27 4
gpt4 key购买 nike

我有以下简化的用例,但它失败了,说明列不存在,这是正确的。在我的真实用例中,这个小问题来自解析 XML,它可能不包括所有预期的列,但在少数情况下包括一个子集,即缺失值:

library(tidyverse)
mapping <- c('a', 'b', 'c')
names(mapping) <- c('x', 'y', 'z')

tibble(a=c(1, 2, 3), b=c('m', 'm', 'm')) %>%
select(!!! mapping)
Error: Unknown column `c`
Run `rlang::last_error()` to see where the error occurred.

错误是正确的。但是,有没有一种方法可以加强这一点,以便 c 在丢失时自动使用 NA 创建?

更新:我在 tidyverse 之外制定了以下简单的解决方案:

# create a data frame instead of a tibble
df <- data.frame(a=c(1, 2, 3), b=c('m', 'm', 'm'), stringsAsFactors = FALSE)
# fill in missing columns with NAs
df[,setdiff(mapping, colnames(df))] <- NA
# reorder columns to match the mapping
df <- df[, mapping]
df
# now is safe to rename using the mapping
as_tibble(df) %>%
select(!!! mapping)

我仍然对使用 tidyversetibble 的现代解决方案感兴趣。

最佳答案

您的解决方案的扩展可能是

library(tidyverse)

df[,setdiff(mapping, colnames(df))] <- NA

df %>% rename_all(~names(mapping))

# x y z
#1 1 m NA
#2 2 m NA
#3 3 m NA

或者另一种方法

map_dfc(setdiff(mapping, colnames(df)), ~df %>% mutate(!!.x := NA)) %>%
arrange(mapping) %>%
rename_all(~names(mapping))

关于r - 是否有比使用三重感叹号选择更强大的重命名替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59335860/

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