从数据框中的一行中删除最后n个元素

时间:2018-10-01 15:28:13

标签: r regex

我想删除数据帧中每行的最后n个元素。我正在使用的数据框(head_col)有一列,我希望将此列拆分为更多列-一个保存原始元素的最后一个元素,另一个保存最后两个元素,另一个保存最后三个元素。

通过搜索,我发现了非常有用的主题,例如this和其他相关主题,但是我是这样的正则表达式玩具,我无法设法重写片段,因此它占用了最后两个/三个元素。我也尝试使用stringi及其stri_extract_last_words之类的软件包,但这也只不过是硬道理。如果/如何使用此非常方便的stringi函数来将其获取所需的任何指针,将不胜感激。

链接到源.xls文件-https://www.dropbox.com/s/c1ftjwine8ekj65/Book2_1.xls?dl=0

library(data.table)
library(XLConnect)
library(stringr)
library(stringi)

#load .xls
wb <- loadWorkbook('D:/MOMUT1/GIS_Workload/Other/alex/Book2_1.xls')
df <- readWorksheet(wb, 1, header = TRUE)

#remove NAs
df_final <- subset(df, !is.na(df$HEADLINE))

#take out HEADLINE column to work on
head_col <- data.table(df_final$HEADLINE)

#regex attempts
head_col_last_1 <- sub(".*\\s+", '', head_col$V1) # takes only last word
head_col_last_2 <- gsub(".*\\s+(.*)", "\\1", head_col$V1) #also takes only last word

#stringi attempt
head_col_last_1 <- data.frame(stri_extract_last_words(head_col$V1))

1 个答案:

答案 0 :(得分:1)

您可以使用

head_col_last_1 <- str_extract(head_col$V1, "\\S+(?:\\s+\\S+){1,2}(?=\\s*$)")

模式匹配:

  • \\S+-1个以上非空格字符
  • (?:\\s+\\S+){1,2}-出现一两次
    • \\s+-1个以上的空格字符
    • \\S+-1个以上非空格字符
  • (?=\\s*$)-后跟0+空格和字符串结尾。
相关问题