我想删除数据帧中每行的最后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))
答案 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+空格和字符串结尾。