R 如何为数据帧中的每一行提取句子中的最后3个元素?
我有以下数据帧:R 如何为数据帧中的每一行提取句子中的最后3个元素?,r,regex,string,dataframe,R,Regex,String,Dataframe,我有以下数据帧: df <- structure(list(matrix.unlist.all_dates...nrow...230..byrow...T. = c( "Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Frankfurt am Main, 14 December
df <- structure(list(matrix.unlist.all_dates...nrow...230..byrow...T. = c(
"Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Frankfurt am Main, 14 December 2000",
"Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Frankfurt am Main, 2 November 2000",
"Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Paris, 19 October 2000",
"Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Frankfurt am Main, 5 October 2000",
"Willem F. Duisenberg, President of the European Central Bank, Christian Noyer, Vice-President of the European Central Bank, Frankfurt am Main, 14 September 2000",
"Willem F. Duisenberg, President of the European Central Bank, Lucas Papademos, Vice-President of the European Central Bank, Frankfurt, 10 July 2003.",
"Willem F. Duisenberg, President of the European Central Bank, Lucas Papademos, Vice-President of the European Central Bank, Frankfurt, 5 June 2003."
)), class = "data.frame", row.names = c(NA, -7L))
正如您可以看到的,每行中的文本都遵循一个清晰的模式,最后三个单词是日期。我只想从每一行中提取这三个单词,基本上就是日期
你会怎么做?我尝试了substr,但由于每行的长度不同,我没有成功。您可以使用正则表达式提取日期
gsub(".* (\\d+ \\w+ \\d+)\\.?$", "\\1", df[, 1])
模式\\d+\\w+\\d+匹配
一个或多个数字\\d+,后跟
一个空格,后面跟着
一个或多个字母\\w+,后跟
一个空格,后面跟着
一个或多个数字\\d+。
因此,在括号内,您可以捕获日期。
然后用日期替换整个字符串:\\1表示括号内匹配的内容。可以使用正则表达式提取日期
gsub(".* (\\d+ \\w+ \\d+)\\.?$", "\\1", df[, 1])
模式\\d+\\w+\\d+匹配
一个或多个数字\\d+,后跟
一个空格,后面跟着
一个或多个字母\\w+,后跟
一个空格,后面跟着
一个或多个数字\\d+。
因此,在括号内,您可以捕获日期。
然后用日期替换整个字符串:\\1表示括号内匹配的内容。一个选项是使用属于tidyverse world的软件包stringr中的word函数直接选择最后三个单词
library(stringr)
str_replace_all(word(df[,1], -3, -1), fixed("."), "")
# [1] "14 December 2000" "2 November 2000" "19 October 2000" "5 October 2000" "14 September 2000" "10 July 2003" "5 June 2003"
str_replace_all函数用于替换字符串末尾可能出现的点。fixed helper函数表明。是实际的点,不是正则表达式标记。一个选项是使用属于tidyverse world的软件包stringr中的word函数直接选择最后三个单词
library(stringr)
str_replace_all(word(df[,1], -3, -1), fixed("."), "")
# [1] "14 December 2000" "2 November 2000" "19 October 2000" "5 October 2000" "14 September 2000" "10 July 2003" "5 June 2003"
str_replace_all函数用于替换字符串末尾可能出现的点。fixed helper函数表明。是实际的点,不是正则表达式标记