首页 > 解决方案 > 如何从长字符串中提取 2 个日期并将它们放在两个不同的列中?

问题描述

我有一个数据框df

df = data.frame(text = "M2O__LS___P_20160727T165346_20160808T165347_VV_ts_pan_fgdo_inte_dbrrt_IW9")

我想要一个新的数据框df2textdf.

所需的输出数据帧是:

     begin      end
1 20160727 20160808

我特别想知道tidyverse解决这个问题的方法(除非基础r效率更高)

标签: rdataframetidyverse

解决方案


1) Base R阅读下划线分隔的文本,取第 7 列和第 8 列,添加所需的名称并删除 T 及其后面的所有内容。

DF <- read.table(text = df$text, sep  = "_")[7:8]
names(DF) <- c("begin", "end")
DF[] <- lapply(DF, sub, pattern = "T.*", replacement = "")
DF
##      begin      end
## 1 20160727 20160808

1a)另一种基础溶液。

pat <- "_(\\d{8})T.*_(\\d{8})T"
strcapture(pat, df$text, list(begin = character(0), end = character(0)))
##      begin      end
## 1 20160727 20160808

2) read.pattern pat 来自 (1a)

library(gsubfn)
read.pattern(text = df$text, pattern = pat, col.names = c("begin", "end"))
##      begin      end
## 1 20160727 20160808

3) tidyr pat 来自 (1a)。

library(tidyr)
extract(df, text, c("begin", "end"), pat)
##      begin      end
## 1 20160727 20160808

推荐阅读