簡體   English   中英

R 在列表中跨多個數據框使用 grepl

[英]R using grepl across multiple dataframes in a list

我有一個數據框列表,每個數據框都包含多個相同的列。 在其中一列中,有多個實例其中一行僅包含“[]”。 我的目標是用空白替換這些實例。

我試圖通過 map function 和 grepl 這樣做。 當它運行時,output 沒有變化。我在這里的方向正確嗎?

請注意我區分了“[]”和“[value]”

我只想用空格替換空括號。

我的代碼如下:

first_column <- c("1", "2", "3","4")
second_column <- c("value1", "value2","[]","[value]")
first_column_2 <- c("5", "6", "7","8")
second_column_2 <- c("value1", "[]","[]","[value2]")
first_column_3<- c("9", "10", "11","12")
second_column_3 <- c("[]", "[value2]","[]","[]")
df_1 <- data.frame(first_column,second_column)
df_2 <- data.frame(first_column_2,second_column_2)
df_3 <- data.frame(first_column_3,second_column_3)
df_list <- list(df_1,df_2,df_3)

var <- c(2)
df_list <- map(df_list, ~.x[!grepl("[[]",var),])

謝謝!

我們可以使用lapplygsub來完成這個。 如果模式匹配, grepl返回 true 或 false,而gsub允許您用其他內容替換匹配項。 請注意,您可以輕松指定NA而不是指定空字符串 ( '' ),但這將取決於您對“空白”的定義。

在這里,我使用 base R 的lapply ,在這種情況下,它等同於purrr::map (即使語法在這里也可以互換)。

data <- lapply(df_list, function(x) {
  x %>% 
    mutate(across(where(is.character), ~gsub('\\[\\]', '', .x)))
})

[[1]]
  first_column second_column
1            1        value1
2            2        value2
3            3              
4            4       [value]

[[2]]
  first_column_2 second_column_2
1              5          value1
2              6                
3              7                
4              8        [value2]

[[3]]
  first_column_3 second_column_3
1              9                
2             10        [value2]
3             11                
4             12                

你有幾個問題:

  • (a) 你說你想用 "" 替換"[]" ""但你的代碼試圖完全刪除它們,而不是替換它們。 使用sub而不是grepl進行替換——或者更好,因為你匹配的是整個字符串,根本不要使用正則表達式
  • (b) 您在數字 2 上運行grepl :您有var <- 2並且您的命令是grepl("[[]",var) ,即grepl("[[]", 2) ,它始終為FALSE因為字符串“2”不包含方括號。
  • (c) 您的grepl模式正在搜索任何包含[的字符串。 因此,如果您更正 (a) 和 (b),您仍然會匹配像"[value1]"這樣的字符串。

正如我在 (a) 中所說,當您匹配一個完整的字符串時,您根本不需要正則表達式。 我會這樣做:

df_list <- map(df_list, ~ {
  .x[[var]][.x[[var]] == "[]"] = ""
  .x
})
df_list
# [[1]]
#   first_column second_column
# 1            1        value1
# 2            2        value2
# 3            3              
# 4            4       [value]
# 
# [[2]]
#   first_column_2 second_column_2
# 1              5          value1
# 2              6                
# 3              7                
# 4              8        [value2]
# 
# [[3]]
#   first_column_3 second_column_3
# 1              9                
# 2             10        [value2]
# 3             11                
# 4             12              

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM