【问题标题】:How to replace parts of character cells in a list of dataframes in R如何替换R中数据框列表中的部分字符单元格
【发布时间】:2017-08-21 19:39:28
【问题描述】:

我有一个看起来像这样的数据帧列表“L”(实际上有超过 2 个数据帧):

> L

[[1]]
                VAR
1 "Ab", "B", "C", "Dd", 

[[2]]
               VAR
1 "Ee", "B", "Ab", "H",

即每个数据帧都包含一个名为“VAR”的变量,其中一个观察值由一个字符列表组成。我正在寻找一种方法来用数字替换满足给定条件的所有字符。在上面的示例中,我想用数字 5 替换所有“Ab”,用数字 3 替换所有“B”。如何做到这一点,以便它适用于每个数据帧(即所有“A”)在列表“L”中?谢谢!

【问题讨论】:

    标签: r list dataframe replace conditional-statements


    【解决方案1】:

    我们可以使用chartr

    lapply(L, function(x) transform(x, VAR = chartr('A', '5', VAR)))
    #[[1]]
    #         VAR
    #1 5, B, C, D
    
    #[[2]]
    #         VAR
    #1 E, F, 5, H
    

    更新

    我们可以使用gsub 匹配以“A”开头后跟零个或多个非空白字符 (\\S*) 的单词,并将其替换为 5。

    lapply(L1, function(x) transform(x, VAR = gsub("\\bA\\S*", 5, VAR)))
    

    如果我们正在寻找完全匹配,请将A\\S* 替换为\\bAb\\b

     lapply(L1, function(x) transform(x, VAR = gsub("\\bAb\\b", 5, VAR)))
    

    数据

    L <- list(data.frame(VAR = "A, B, C, D", stringsAsFactors=FALSE),
          data.frame(VAR = "E, F, A, H", stringsAsFactors=FALSE))
    
    L1 <- list(data.frame(VAR = "Ab, B, C, D", stringsAsFactors=FALSE),
          data.frame(VAR = "E, F, Ab, H", stringsAsFactors=FALSE))
    

    【讨论】:

      【解决方案2】:
      L <- list(data.frame(VAR = c("Ab", "B", "C", "D"), stringsAsFactors=FALSE),
                data.frame(VAR = c("E", "F", "Ab", "H"), stringsAsFactors=FALSE))
      

      您也可以使用purrrreplace

      purrr::map(L,  ~replace(.x,.x=="Ab",5))
      

      【讨论】:

        猜你喜欢
        • 2011-07-26
        • 1970-01-01
        • 2014-02-06
        • 2021-09-08
        • 1970-01-01
        • 2019-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多