Как организовать 2x2 data.frame из одного вектора - PullRequest
0 голосов
/ 28 января 2019

У меня есть следующий 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?

Я хотел бы создать функцию, которая будет читать каждую строку и перемещать каждую строку, следующую за строкой, с датой, в новый столбец иудалить все строки, которые НЕ следуют за датами.Мой желаемый вывод, основанный на приведенном выше примере:Мне не повезло, и я даже не знал, куда идти.

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

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Опция base R с использованием grep.Сначала найдите индексы, которые строго следуют шаблону даты, а затем создайте новый фрейм данных с новым столбцом, используя следующую строку этого индекса.

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
0 голосов
/ 28 января 2019

Один из вариантов - создать новый столбец из '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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...