首页 > 解决方案 > 如何索引列表的第一个元素,并将其应用于 R 中数据帧的每一行?

问题描述

我有一列包含日期元素的列表对象,我想选择第一个日期并变异为新列,但现在我遇到了一些索引问题。

我试过索引列表,但它不适用于每一行,但总是显示第一行的第一个元素。代码如下所示:

> 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

标签: rtidyverse

解决方案


我们也可以使用pluckwithreduce确保Dates 不被强制numeric

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

如果我们需要last,plucklast

data %>%
   mutate(time1 = map(Date, pluck, last) %>% 
                    reduce(c))

推荐阅读