如何解决如果名称%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/tibble
对vector
不强制
这可以通过一个简单的例子重现
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")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。