繁体   English   中英

如何在R中使用split()时指定具有其他片段的行?

[英]How do I specify the rows that have additional pieces while using separate() in R?

我正在使用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行中填充有NA [3]。

然后,如何获得表示行中还有其他片段的列表,在此示例中为[2]?

一种选择是使用anydate转换为“ Date”类(从anytime -它将大多数格式转换为Date类,但是在某些情况下会出现“ 01-06”-这不是Date,因为它不是'具有“年份”或其中一项)

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM