用于从数据集中删除日期的R-gsub()
我正在使用gsub()函数从数据中删除不需要的文本。我只想把年龄放在括号里,而不是出生日期。然而,这是一个出生日期不同的大型数据集 数据示例:用于从数据集中删除日期的R-gsub(),r,regex,substring,gsub,R,Regex,Substring,Gsub,我正在使用gsub()函数从数据中删除不需要的文本。我只想把年龄放在括号里,而不是出生日期。然而,这是一个出生日期不同的大型数据集 数据示例: Test1$Age Sep 10, 1990(27) Mar 26, 1987(30 Feb 24, 1997(20) 您可以使用stringr包中的str_extract()执行此操作: s <- "Sep 10, 1990(27)" # get the age in parentheses stringr::str_extract(s,
Test1$Age
Sep 10, 1990(27)
Mar 26, 1987(30
Feb 24, 1997(20)
您可以使用
stringr
包中的str_extract()
执行此操作:
s <- "Sep 10, 1990(27)"
# get the age in parentheses
stringr::str_extract(s, "\\([0-9]+\\)")
# just the age, with parentheses removed
stringr::str_extract(s, "(?<=\\()[0-9]+")
或者,在tidyverse
符号中:
df <- df %>% mutate(age = stringr::str_extract(age, "\\([0-9]+\\)"))
df%突变(age=stringr::str\u提取(age,“\\([0-9]+\\)”)
似乎有两个问题:
sub
解决这些问题。匹配
- 任意数量的字符
后跟*
- 左括号
后跟[(]
- 捕获组中的数字
后跟(\\d+)
- 可选右括号
[)]?
\\1
和右括号
没有使用任何软件包
pat <- ".*[(](\\d+)[)]?"
transform(test, Age = sub(pat, "(\\1)", Age))
transform(test, Age = sub(")?$", ")", substring(Age, 13))
2)子字符串/sub另一种可能是从第13个字符开始,它给出从左括号到字符串末尾的所有内容,如果缺少,则插入a))?$
匹配字符串末尾的右括号,如果没有,则仅匹配字符串末尾的右括号。替换为右括号。同样,没有使用包
pat <- ".*[(](\\d+)[)]?"
transform(test, Age = sub(pat, "(\\1)", Age))
transform(test, Age = sub(")?$", ")", substring(Age, 13))
如果我们想要一个数字年龄的话,这种方法的一种变体是从第14个字符中提取所有字符,并删除最后一个字符(如果有)
transform(test, Age = as.numeric(sub(")", "", substring(Age, 14))))
3)读取.table使用read.table
读取带有sep=“(“
和comment.char=“)”
的Age
字段,并选择第二列读取内容。这将给出数字年龄,我们可以使用sprintf
将其用括号括起来。如果Age
是字符(与因子相反),那么as.character(Age)
可以选择性地写成Age
同样,没有使用包。这个不使用正则表达式
transform(test, Age =
sprintf("(%s)", read.table(text = as.character(Age), sep = "(", comment.char = ")")$V2)
注:可复制形式的输入为:
test <- data.frame(Age = c("Sep 10, 1990(27)", "Mar 26, 1987(30", "Feb 24, 1997(20)"))
testgsub('\\([0-9]+)\\),'\\1',x)
为Michael干杯,但这只是去掉了括号,忘记了我的*
test <- data.frame(Age = c("Sep 10, 1990(27)", "Mar 26, 1987(30", "Feb 24, 1997(20)"))