如果名称%in%列表中的前缀在R中的Rename_if列带有前缀:列表不匹配

问题描述

我有一个用map函数创建的小标题列表。列名称如下...

dfA[[1]]%>% colnames(.)  
[1] "date_strt"  "grouped_id" "10938_0"    "12881_0"   

带编号的列名称为我正在使用的功能(鼠标)带来了问题,我需要对其进行更改以使字符串以前缀开头。由于需要大量小标题,因此无法直接引用这些名称。因此,我从另一个小标题names

中创建了字符向量列表
df_list <- dfB %>% names() %>% as.vector()

某些名称的前缀为字符串“ ITEM”,因此我将其删除以用于匹配列表。

df_list <- purrr::map(df_list,function(x){x %>% str_remove(.,"ITEM")})

当我尝试根据字符串追加时,我们得到了一些不需要的特殊字符

purrr::map2(dfA,df_list,function(df,name_list)
    df %>% rename_if(colnames(.) %in% name_list,~paste0("ITEM",.)))

[[1]] date_strt           grouped_id `ITEM\`12881_0\`` `ITEM\`79916_0\``

然后,我被告知这是一个问题,然后我用list将名称列表(df_list)转换为列表。

df_list<- list(df_list)

这昨晚有效,但是由于某种原因,今天重启我的会话(并更新了我的软件包)后,它不再起作用。

当我对行名进行条件检查时

dfA[[1]][-1]%>% colnames(.) == df_list[[1]]

我在申请list

之前就已经知道了
[1] FALSE  TRUE  TRUE

但是之后

[1] FALSE FALSE FALSE

我不知道为什么,但是df_list [[1]]现在返回两个列表时间,而不仅仅是返回列表[1]

之前应用list

[1] "day"     "10938_0" "12881_0"

之后应用list

[[1]]
[1] "day"     "10938_0" "12881_0"

[[2]]
[1] "day"     "12881_0" "79916_0"

关于为什么以及如何解决的任何建议?另外,它只有以数字开头的列,我也需要附加前缀,但看不到明显的解决方案。

解决方法

此处str_remove应用于整个数据集,根据?str_remove,输入string将为

string-输入向量。一个字符向量,或者一个可以强制的东西

data.frame/tibblevector不强制

这可以通过一个简单的例子重现

head(iris) %>% 
     str_remove("\\..*")
#[1] "c(5"                 "c(3"                 "c(1"                 "c(0"                 "c(1,1,1)"

相反,它应该应用于每列

library(dplyr)
library(purrr)
library(stringr)
purrr::map(df_list,~ .x %>%
                          rename_all(~ str_remove(.,"ITEM")))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...