我有一个用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/tibble
对vector
不可强制
这可以用一个简单的例子来重现
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")))