R中的字符串拆分

时间:2015-08-29 17:00:56

标签: r

我的数据集中有以下列。

TENURE

April 30, 1789 – March 3,1797
March 4, 1797 - March 3, 1801
March 4, 1841 - April 4, 1841[Died]
March 4, 1881 - September 19, 1881[Assassinated]
January 20, 1969 - August 9, 1974[Resigned]
...
...

我已将数据集加载到一个数据框中,其中一列名为TENURE。 现在我想再制作两个名字" Start"和"结束"基于TENURE.Those然后将两个新列包含在我的数据帧中。 两列的结果看起来像这样

Start   End
1789    1797
1797    1901
1841    1841
1881    1881
1969    1974

到目前为止,我已经完成了以下

require(XML)
require(stringr)
urlPresidents<-"http://www.theholidayspot.com/july4/us_presidents.htm"
presidents <- readHTMLTable(urlPresidents,which = 3,
                            skip.rows = 1,header = TRUE,
                            stringsAsFactors=FALSE)
yearList <- str_split(presidents$TENURE,pattern = ",",n = 1)

我受到打击而没有得到如何处理?

2 个答案:

答案 0 :(得分:2)

你可以str_extract_all并匹配全部数字编号,在这种情况下它可以工作。

r <- str_extract_all(presidents$TENURE, "\\d{4}")
df <- data.frame(start = sapply(r, "[", 1), end = sapply(r, "[", 2))
head(df)
##   start  end
## 1  1789 1797
## 2  1797 1801
## 3  1801 1809
## 4  1809 1817
## 5  1817 1825
## 6  1825 1829

答案 1 :(得分:2)

我认为可以分三步完成:

  1. 将2日期字符串分成两部分

    Posts
  2. 将字符串转换为日期对象

    a <- c('March 4, 1797 - March 3, 1801','March 4, 1841 - April 4, 1841[Died]')
    a_devided <- strsplit(a,' - ')
    
  3. 从日期中提取年份:

    a_devided_dates <- lapply(a_devided, function(x) as.Date( x, '%B %d, %Y') )