我正在处理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")
但是,运行这些命令后似乎没有任何改变。字符串保持不变。我在这里做什么错了?
答案 0 :(得分:3)
$
使用所谓的“正则表达式”(您可以查询它们以获得更多信息)。这样,除了显而易见的值之外,还有一系列具有特殊含义的字符。一个这样的例子就是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
替换为您想要的值。