如何避免purrr :: pmap_dfr将Date转换为数字

时间:2018-01-12 12:57:51

标签: r purrr

为什么purrr :: pmap_dfr将Date转换为数字,我该如何避免?

以下是包含三种不同类型列的data.frame的示例。 如您所见,有一个Date列。使用purr :: pmap_dfr后,它是数字:

library(tidyverse)
library(lubridate)

df <- data.frame(
  a = c('a', 'b', 'c'),
  b = c(10, 20, 30),
  c = c(100.5, 200.5, 300.5),
  d = c(ymd("2016-01-01"), ymd("2017-01-01"), ymd("2018-01-01")),
  stringsAsFactors = FALSE
)

f <- function(a, b, c, d){
  r <- data_frame(a=a, b=b, c=c, d=d, class.of.d=class(d))
  return(r)
}

pmap_dfr(df, f)

结果是

 # A tibble: 3 x 5
      a     b     c     d class.of.d
  <chr> <dbl> <dbl> <dbl>      <chr>
1     a    10 100.5 16801    numeric
2     b    20 200.5 17167    numeric
3     c    30 300.5 17532    numeric   

2 个答案:

答案 0 :(得分:0)

我不确定你为什么在这里使用pmap_dfr。你想要映射什么?

HAVING SUM(IF(tbpda.question_id = 1,IF(tbpda.answer_id !=0,IF(tbua.question_id =tbpda.question_id AND `tbua`.`answer_id` = tbpda.answer_id,tbua.user_id,''),true),'')) > 0

产量

f <- function(x){
  r <- data_frame(a=x$a, b=x$b, c=x$c, d=x$d, class.of.d=class(d))
  return(r)
}


f(df)

也许你的意思是

 a         b     c d          class.of.d
  <chr> <dbl> <dbl> <date>     <chr>     
1 a      10.0   100 2016-01-01 Date      
2 b      20.0   200 2017-01-01 Date      
3 c      30.0   300 2018-01-01 Date  

返回

h <- function(x){
 class(x)

}

map_dfr(df, h)

a b c d <chr> <chr> <chr> <chr> 1 character numeric numeric Date 的工作方式是它将函数(在本例中为class())应用于数据框中的每一列。你没有写出函数中的列,只需要获取数据框,map就可以将它拆分。

答案 1 :(得分:0)

这是pmap_dfr的一个已知问题。见https://github.com/tidyverse/purrr/issues/358