我正在使用tidyr来清理我的数据
df <- data.frame(Time = c("2014-01-03", "2014-01-04-morning", "01-06", "2014-01-07"), stringsAsFactors = FALSE)
str(df)
'data.frame': 4 obs. of 1 variable:
$ Time: chr "2014-01-03" "2015-01-04-morning" "01-06" "2014-01-07"
然后当我使用
separate(df, Time, c("Y", "M", "D"), sep = '-')
Y M D
1 2014 01 03
2 2014 01 04
3 01 06 <NA>
4 2014 01 07
警告消息:
1:预期3件。在1行中丢弃了其他碎片[2]。
2:预期3件。 1行[3]中填充有NA
的缺失片段。
然后我如何获得表示行中还有其他片段的列表,在此示例中为[2]?
答案 0 :(得分:0)
一种选择是使用anydate
(从anytime
转换为'Date'类-它将大多数格式转换为Date
类,但是会有一些边缘情况“ 01-06”-不是日期,因为它没有“年份”或组成部分之一)
library(tidyverse)
library(anytime)
df %>%
mutate(DATE = anydate(DATE)) %>%
separate(DATE, into = c("Y", "M", "D"))
如果我们需要标记列
df %>%
mutate(flag = str_count(Time, "\\w+") >3) %>%
separate(Time, into = c("Y", "M", "D"))
df <- data.frame(DATE = c("2014-01-03", "2014-01-04-A", "01-06",
"2014-01-07"), stringsAsFactors = FALSE)