r - 如何从长字符串中提取 2 个日期并将它们放在两个不同的列中?
问题描述
我有一个数据框df
:
df = data.frame(text = "M2O__LS___P_20160727T165346_20160808T165347_VV_ts_pan_fgdo_inte_dbrrt_IW9")
我想要一个新的数据框df2
,text
从df
.
所需的输出数据帧是:
begin end
1 20160727 20160808
我特别想知道tidyverse
解决这个问题的方法(除非基础r
效率更高)
解决方案
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
推荐阅读
- excel - 如何将每行填充的列值提取到Excel中的另一个工作表
- flutter - 在颤振上运行构建运行程序时,出现以下错误
- php - 每当上传和解析数据时,服务器都不会提供页面 Laravel
- logstash - Logstash 从 logstash 过滤器中的 [@metadata] 获取值
- r - 在 url 上使用时,readr 的 read_csv 不呈现数据帧
- arrays - 最常出现的带有标准的文本值。模式不起作用
- python-3.x - win32 库即使已经安装也不会丢失
- php - Livewire 队列作业调度 afterRespone() 不起作用
- ios - swift 的 Google AdMob 法律要求
- java - 如何将 AWS MYSQL 实例连接到 android 应用程序(Java)