У меня есть столбец объектов списка, который содержит элементы дат, я хочу выбрать первую дату и изменить его как новый столбец, но теперь у меня есть некоторые проблемы с индексацией.

Я попытался индексировать список, но он не работает для каждой строки, но всегда показывает первый элемент первой строки. Код показывает ниже:

> head(data$Date)
[[1]]
 [1] "2016-06-08" "2016-06-08" "2016-06-13" "2016-06-13" "2016-06-13" "2016-06-14"
 [7] "2016-06-14" "2016-06-14" "2016-06-14" "2016-06-14" "2016-06-14" "2016-09-15"
[13] "2016-10-31"

[[2]]
[1] "2016-10-02"

[[3]]
[1] "2016-09-25"

[[4]]
[1] "2017-02-16"

> data %>%
+     mutate(time1 = Date[[1]][1])%>%
+     select(time1)
# A tibble: 29,036 x 1
   time1     
   <chr>     
 1 2016-06-08
 2 2016-06-08
 3 2016-06-08
 4 2016-06-08
 5 2016-06-08
 6 2016-06-08
2
Bathe 13 Апр 2019 в 12:10

2 ответа

Лучший ответ

Мы также можем использовать pluck с reduce, чтобы убедиться, что Date не приведены к numeric

library(tidyverse)
data %>%
    mutate(time1 =  map(Date, pluck, 1) %>%
                       reduce(c))

Если нам нужны last, pluck last

data %>%
   mutate(time1 = map(Date, pluck, last) %>% 
                    reduce(c))
1
akrun 14 Апр 2019 в 03:02

Попробуйте использовать функцию map из пакета tidyverse purrr:

data %>%
  mutate(time1 = map(Date, ~ .[[1]]) %>% unlist()) %>% 
  select(time1)

Функция map() извлечет первый элемент каждого элемента списка. Поскольку map возвращает список по умолчанию, вам необходимо unlist() вывода, чтобы поместить его в столбец так, как вы хотите.

0
Johnny 13 Апр 2019 в 09:56