【问题标题】:How to string replace rows in a data table如何字符串替换数据表中的行
【发布时间】:2019-12-18 03:15:36
【问题描述】:

我正在处理 GSS 数据,其中一个变量是家庭总收入。我认为他们不必要地将收入低于 10,000 的人分成 8 组,所以我想把他们一起加入。我开始使用string_replace 进行此操作,但它似乎无法识别命令。

我跑:

GSS2018$`Total family income` <- str_replace(GSS2018$`Total family income`,
                                                 "Under $1 000",
                                                  "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$1 000 to 2 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$3 000 to 3 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$4 000 to 4 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$5 000 to 5 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$6 000 to 6 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace_all(GSS2018$`Total family income`,
                                                 "$7 000 to 7 999",
                                                 "Under $10000")
GSS2018$`Total family income` <- str_replace(GSS2018$`Total family income`,
                                                 "$8 000 to 9 999",
                                                 "Under $10000")

但是,在我运行这些之后,似乎没有任何改变。字符串保持不变。我在这里做错了什么?

【问题讨论】:

    标签: r string stringr


    【解决方案1】:

    str_replace 使用所谓的“正则表达式”(您可以查找它们以获取更多信息)。因此,除了明显的价值之外,还有一系列被赋予特殊含义的字符。一个这样的例子是$ 符号,当它用于正则表达式时,它表示字符串的结尾。由于字符串的结尾永远不会出现在字符串的开头,因此这些情况都不会发生。

    解决方案是使用转义子句“不,我的意思是 $”:\\$ 而不是 $

    因此第一行会变成

    GSS2018$`Total family income` <- str_replace(GSS2018$`Total family income`,
                                                 "Under \\$1 000",
                                                  "Under $10000")
    

    不过,您的解决方案似乎要简单得多。您可以执行以下操作,而不是多次执行相同的操作:

    GSS2018[GSS2018$`Total family income` %in% c("Under $1 000", 
                                                 "$1 000 to 2 999", 
                                                  ..., 
                                                  "$8 000 to 9 999")]$`Total family income` <- "Under $10000
    

    ... 被替换为您所追求的值。

    【讨论】:

    • 我尝试了一次性重命名多个类别的更简单方法,但出现此错误:错误:[ 的逻辑索引向量的长度必须等于列数(或 1):* @ 987654329@ 有 24 列 * 索引向量的长度为 2348
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2022-01-02
    • 1970-01-01
    • 2018-09-24
    • 2017-03-25
    • 2016-01-15
    • 2019-11-08
    • 2015-12-25
    相关资源
    最近更新 更多