簡體   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