Как проиндексировать первый элемент списка и применить его к каждой строке кадра данных в R? - PullRequest
1 голос
/ 13 апреля 2019

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

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

> 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 ]

1 голос
/ 13 апреля 2019

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

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

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

data %>%
   mutate(time1 = map(Date, pluck, last) %>% 
                    reduce(c))
0 голосов
/ 13 апреля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...