簡體   English   中英

R-gsub()用於從數據集中刪除日期

[英]R - gsub() for to remove dates from data set

我正在使用gsub()函數從數據中刪除不需要的文本。 我只想把年齡放在括號內,而不是出生日期。 但是,這是在具有不同出生日期的大型數據集中。

數據示例:

Test1$Age

Sep 10, 1990(27)
Mar 26, 1987(30
Feb 24, 1997(20)

您可以使用stringr包中的str_extract()進行此stringr

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]+")

輸出為:

> s <- "Sep 10, 1990(27)"
> 
> # get the age in parentheses
> stringr::str_extract(s, "\\([0-9]+\\)")
[1] "(27)"
> 
> # just the age, with parentheses removed
> stringr::str_extract(s, "(?<=\\()[0-9]+")
[1] "27"

第一個正則表達式匹配包含一個或多個數字的成對括號。 第二個正則表達式使用正向后括號來匹配括號后的一個或多個數字。

如果您的數據位於data.frame df ,其列名為age ,則可以執行以下操作:

df$age <- stringr::str_extract(df$age, "\\([0-9]+\\)")

或者,以tidyverse表示法:

df <- df %>% mutate(age = stringr::str_extract(age, "\\([0-9]+\\)"))

似乎有兩個問題:

  1. 不需要左括號之前的日期
  2. 右括號有時會丟失,需要將其插入

1)sub這些可以通過sub解決。 比賽

  • 任意數量的字符.*后跟
  • 文字左括號[(]后跟
  • 捕獲組(\\\\d+)數字,后跟
  • 可選的右括號[)]?

然后將其替換為左括號,與捕獲組\\\\1的匹配項和右括號。

不使用任何軟件包。

pat <- ".*[(](\\d+)[)]?"
transform(test, Age = sub(pat, "(\\1)", Age))

相反,如果您希望使用年齡作為數字字段,則:

transform(test, Age = as.numeric(sub(pat, "\\1", Age)))

2)substring / sub另一個可能的方法是從第13個字符開始,該字符給出從左括號到字符串末尾的所有內容,如果缺少則插入a)。 )?$在字符串的末尾匹配右括號,如果沒有則僅匹配字符串的末尾。 替換為右括號。 同樣,不使用任何軟件包。

transform(test, Age = sub(")?$", ")", substring(Age, 13))

如果我們希望使用數字Age作為替代,則可以采用第14個字符中的所有內容,如果有的話,則刪除最后一個)。

transform(test, Age = as.numeric(sub(")", "", substring(Age, 14))))

3)read.table使用read.table來讀取sep = "("comment.char = ")"Age字段,並選擇第二列read。 這將給出數字年齡,我們可以使用sprintf用括號將其括起來。 如果Age是字符(而不是factor),那么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)"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM