繁体   English   中英

如何从单个向量安排2x2 data.frame

[英]How to arrange a 2x2 data.frame from a single vector

我有以下data.frame:

v1<-c("8/12/2018", "hello, how are you", "9/9/2016", "What is going on?","the number three", "9/18/2015", "hello", "9/8/1999","not going", "where to next?")
(df<-as.data.frame(v1, stringsAsFactors=FALSE))
                v1
1           8/12/2018
2  hello, how are you
3            9/9/2016
4   What is going on?
5    the number three
6           9/18/2015
7               hello
8            9/8/1999
9           not going
10      where to next?

我想生成一个函数,该函数将读取每一行,并将带日期的行之后的每一行移动到新列,并删除所有不跟随日期的行。 基于上面的示例,我想要的输出如下:

                  v1     value
1           8/12/2018    hello, how are you
2           9/9/2016     What is going on?
3           9/18/2015    hello
4           9/8/1999     not going

我的直觉是复制v1然后lead它,并使用ifelse来创建一个新列,如下所示,但是我没有运气,甚至不确定从那里去哪里。

df$value<-ifelse(v1="^\d{1,2}\/\d{1,2}\/\d{4}$", lead(v1),"NA")

使用grep基本R选项。 首先找出严格遵循日期格式的索引,然后使用该索引的下一行创建带有新列的新数据框。

inds <- grep("^\\d{1,2}/\\d{1,2}/\\d{4}$", df$v1)
with(df, data.frame(v1 = v1[inds], value = v1[inds + 1]))

#         v1              value
#1 8/12/2018 hello, how are you
#2  9/9/2016  What is going on?
#3 9/18/2015              hello
#4  9/8/1999          not going

一种选择是创建从“V1”的新列作为lead的列和filter以数字或仅启动元素Date的“V1”格式

library(tidyverse)
df %>% 
   mutate(value = lead(v1)) %>%
   filter(grepl("^\\d+", v1))
   #or
   #filter(!is.na(mdy(v1)))
#         v1              value
#1 8/12/2018 hello, how are you
#2  9/9/2016  What is going on?
#3 9/18/2015              hello
#4  9/8/1999          not going

暂无
暂无

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

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