如果%list:lists中的名称%不匹配,则用前缀重命名R中的列



我有一个用map函数创建的tibble列表。列名如下。。。

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

编号的列名会给我正在使用的函数(鼠标(带来问题,我需要将它们更改为在开头加一个字符串作为前缀。由于我需要为大量的tibbles执行此操作,因此我无法直接引用这些名称。因此,我从另一个tibblesnames创建了字符矢量列表

df_list <- dfB %>% names() %>% as.vector()

一些名称具有字符串";项目";前缀,所以我将其从匹配列表中删除。

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]]现在返回两个列表时间,而不仅仅是list[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将是

字符串-输入向量。要么是字符矢量,要么是对一个可强制的东西

data.frame/tibblevector不可强制

这可以用一个简单的例子来重现

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

相反,它应该应用于每列

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

相关内容

最新更新