【问题标题】:How to rename a column that is found using str_detect in r?如何重命名在 r 中使用 str_detect 找到的列?
【发布时间】:2023-03-28 05:39:01
【问题描述】:

我想从数据框中替换一个列名,以便我可以更新该列中的值。但是,如果有人可以告诉我如何做到这一点,我愿意接受其他更好的方法来做到这一点。

查找以 Org 开头并以 Type 结尾的列名。有时不同来源的数据框可能有不同的列名。另外,最好让它不区分大小写**

org_type_col <- names(assessment) %>% str_subset("(Org)(.*)(Type)") 
assessment <- assessment %>% setNames(org_type_col = "OrgType")

但这是我遇到错误的地方。我得到的错误是这样的:

Error in setNames(., org_type_col = "OrgType") : unused argument (org_type_col = "OrgType")

我想重命名该列,以便执行以下操作:

### Organization Type

assessment <- assessment %>% 
  add_column(OrganizationType = case_when(
(str_detect(.$OrgType, "Health")) ~ "Healthcare", 
(str_detect(.$OrgType, "Pharmaceuticals")) ~ "Pharmaceuticals",
(str_detect(.$OrgType, "Banking|Financial|Insurance")) ~ "Financial Services",
(str_detect(.$OrgType, "Computer|Telecommunication")) ~ "High-Tech",
(str_detect(.$OrgType, "Energy|Utilities")) ~ "Energy",
(str_detect(.$OrgType, "Education")) ~ "Education",
(str_detect(.$OrgType, "Government")) ~ "Government")) %>%
replace_na(list(OrgType = "Unknown"))

有没有更简单更好的方法来将它们全部结合起来?

【问题讨论】:

  • 如果您使用dplyr,请使用rename 而不是setNames。 (setNames 是一个基本函数,它希望您提供所有名称,而不仅仅是一个替换)。

标签: r string dplyr


【解决方案1】:

在基础 R 中,您可以这样做:

names(assessment)[grepl('^Org.*Type$', names(assessment), ignore.case = TRUE)] <- 'OrgType'

如果您对tidyverse 解决方案感兴趣,可以尝试:

library(dplyr)
library(stringr)

assessment %>%
  rename_with(~str_detect(.,regex('^Org.*Type$', ignore_case = TRUE)), 'OrgType')

【讨论】:

  • Tidyverse 方法仅将列名更改为 TRUE 而不是 OrgType,但基本的 R 方法工作正常。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2021-02-09
  • 2018-10-29
  • 2016-01-11
  • 1970-01-01
  • 2021-11-26
  • 2022-08-08
相关资源
最近更新 更多