繁体   English   中英

如果名称 %in% 列表:列表不匹配,则在 R 中使用前缀重命名_if 列

[英]Rename_if column in R with prefix if name %in% list: lists do not match

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

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

编号的列名称为我正在使用的函数(鼠标)创建问题,我需要将它们更改为在开头添加一个字符串。 由于我需要为大量小标题执行此操作,因此我无法直接引用名称。 所以我从另一个 tibbles 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) 转换为 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将是

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

data.frame/tibble不能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")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM