【问题标题】:Vectorized "find and replace" in data frame in R [duplicate]R中数据框中的矢量化“查找和替换”[重复]
【发布时间】:2020-08-04 12:50:26
【问题描述】:

我正在尝试对数据框中的多个字符串进行矢量化“查找和替换”。在下面的模拟数据框中,我想用“狗”替换“人类”,用“驼鹿”替换“猫” .

模拟输入:

df<-data.frame(organism=c("human","cat","bird","virus","bat","pangolian"),size=c(6,4,2,1,3,5))
df
   organism size
1     human    6
2       cat    4
3      bird    2
4     virus    1
5       bat    3
6 pangolian    5

预期输出:

df1
   organism size
1       dog    6
2     moose    4
3      bird    2
4     virus    1
5       bat    3
6 pangolian    5

实际上,我有一个大数据框和许多替换,因此我希望将替换字符串放在这样的向量中:

replacement<-c("dog","moose")

我知道这应该只是为了解决,但作为一个新手,我根本无法理解它。所以,提前谢谢。

【问题讨论】:

    标签: r string dataframe


    【解决方案1】:

    有多种方法可以进行查找和替换。以下方法仅使用命名向量,类似于 python 字典:

    organism_map <- levels(df$organism)
    names(organism_map) <- organism_map
    organism_map["human"] <- "dog"
    organism_map["cat"] <- "moose"
    

    organism_map 包含映射:

      human         cat        bird       virus         bat   pangolian 
      "dog"     "moose"      "bird"     "virus"       "bat" "pangolian" 
    

    然后你只需按照df$organism名称的顺序查找organism_map向量值,结果保存回df$organism列:

    df$organism <- organism_map[df$organism]
    

    结果:

       organism size
    1       dog    6
    2     moose    4
    3      bird    2
    4     virus    1
    5       bat    3
    6 pangolian    5
    

    【讨论】:

    • 非常感谢 Emer。我会尽量理解这个解决方案,因为它确实有效:)
    【解决方案2】:

    你可以从stringr 使用str_replace

    pattern <- c('human', 'cat')
    replacement <- c('dog', 'moose')
    df$organism <- stringr::str_replace(df$organism, pattern, replacement)
    

    【讨论】:

    • 非常感谢罗纳克。我试图用 sub() 函数完全做到这一点,但失败了,因为该函数不像 str_replace() 函数那样矢量化。
    猜你喜欢
    • 2012-01-03
    • 2012-12-03
    • 2016-04-12
    • 1970-01-01
    • 2018-05-04
    • 2017-12-11
    • 2014-07-05
    • 2014-04-23
    • 2015-09-24
    相关资源
    最近更新 更多