R 数字表达式和取消列表不起作用
R digit-expression and unlist doesn't work
所以我买了一本关于 R 和自动数据收集的书,第一个例子让我感到困惑。
我有一个 table,其日期列由数字组成,类似于“2001-”。根据教程,下面的行将通过挑出前四位数字来从日期中删除“-”:
yend_clean <- unlist(str_extract_all(danger_table$yend, "[[:digit:]]4$"))
当我运行这个命令时,"yend_clean"只是设置为"character (empty)"。
如果我删除“4$”,我会将所有日期拆分成原子,这样最初看起来像“1992”、“2003”的列表现在看起来像这样“1”、“9”等等
所以我怀疑“4$”周围的东西是问题所在。我找不到任何相关文档来帮助我找到正确的解决方案。
希望这里有人能给我指出正确的方向。
这是一道正则表达式题。你的正则表达式是错误的。使用:
unlist(str_extract_all("2003-", "^[[:digit:]]{4}"))
或等同于
sub("^(\d{4}).*", "\1", "2003-")
如果你真的想要删除“-”
sub("-", "", "2003-")
正则表达式中的重复由 {}
参数控制。你错过了那个。另外 $
表示匹配字符串的末尾,因此您的表达式翻译为:
match any single digit, followed by a 4, followed by the end of the string
当您删除“4”时,模式变为 "match any single digit",这正是所发生的事情(即您分别匹配每个数字)。
我建议的模式改为:
match the beginning of the string (^
), followed by a digit repeated four times.
sub
变体是一种非常常见的技术,我们创建一个模式来匹配我们想要保留在括号中的内容,然后括号外的所有其他内容(.*
匹配任何内容,任何内容次数)。然后我们用括号中的片段替换整个匹配项(\1
表示括号中的第一个子表达式)。 \d
等同于 [[:digit:]]
.
- A good website 了解正则表达式
- A visualization tool看具体的正则表达式如何匹配字符串
如果您指的是 Automated Data Collection with R 这本书,代码可能是这样的:
yend_clean <- unlist(str_extract_all(danger_table$yend, "[[:digit:]]{4}[-]$"))
yend_clean <- unlist(str_extract_all(yend_clean, "^[[:digit:]]{4}"))
假设您有一个字符串“1993–2007, 2010-”,并且您想要获取最后一个给定年份,即“2010”。第一行,表示四位数字和一个破折号,结尾,return“2010-”,第二行return“2010”.
所以我买了一本关于 R 和自动数据收集的书,第一个例子让我感到困惑。
我有一个 table,其日期列由数字组成,类似于“2001-”。根据教程,下面的行将通过挑出前四位数字来从日期中删除“-”:
yend_clean <- unlist(str_extract_all(danger_table$yend, "[[:digit:]]4$"))
当我运行这个命令时,"yend_clean"只是设置为"character (empty)"。
如果我删除“4$”,我会将所有日期拆分成原子,这样最初看起来像“1992”、“2003”的列表现在看起来像这样“1”、“9”等等
所以我怀疑“4$”周围的东西是问题所在。我找不到任何相关文档来帮助我找到正确的解决方案。
希望这里有人能给我指出正确的方向。
这是一道正则表达式题。你的正则表达式是错误的。使用:
unlist(str_extract_all("2003-", "^[[:digit:]]{4}"))
或等同于
sub("^(\d{4}).*", "\1", "2003-")
如果你真的想要删除“-”
sub("-", "", "2003-")
正则表达式中的重复由 {}
参数控制。你错过了那个。另外 $
表示匹配字符串的末尾,因此您的表达式翻译为:
match any single digit, followed by a 4, followed by the end of the string
当您删除“4”时,模式变为 "match any single digit",这正是所发生的事情(即您分别匹配每个数字)。
我建议的模式改为:
match the beginning of the string (
^
), followed by a digit repeated four times.
sub
变体是一种非常常见的技术,我们创建一个模式来匹配我们想要保留在括号中的内容,然后括号外的所有其他内容(.*
匹配任何内容,任何内容次数)。然后我们用括号中的片段替换整个匹配项(\1
表示括号中的第一个子表达式)。 \d
等同于 [[:digit:]]
.
- A good website 了解正则表达式
- A visualization tool看具体的正则表达式如何匹配字符串
如果您指的是 Automated Data Collection with R 这本书,代码可能是这样的:
yend_clean <- unlist(str_extract_all(danger_table$yend, "[[:digit:]]{4}[-]$"))
yend_clean <- unlist(str_extract_all(yend_clean, "^[[:digit:]]{4}"))
假设您有一个字符串“1993–2007, 2010-”,并且您想要获取最后一个给定年份,即“2010”。第一行,表示四位数字和一个破折号,结尾,return“2010-”,第二行return“2010”.