如何避免 purrr::pmap_dfr 将日期转换为数字
How to avoid purrr::pmap_dfr converting Date to numeric
为什么 purrr::pmap_dfr 将 Date 转换为数字,我该如何避免?
这是一个包含三种不同类型列的 data.frame 示例。
如您所见,有一个日期列。使用 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
我不确定你为什么在这里使用 pmap_dfr。你想映射什么?
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)
哪个returns
a b c d
<chr> <chr> <chr> <chr>
1 character numeric numeric Date
map_dfr()
的工作方式是将函数(在本例中为 class())应用于数据框中的每一列。您无需在函数中写出列,只需获取数据框,地图即可完成拆分工作。
这是 pmap_dfr 的一个已知问题。参见 https://github.com/tidyverse/purrr/issues/358
为什么 purrr::pmap_dfr 将 Date 转换为数字,我该如何避免?
这是一个包含三种不同类型列的 data.frame 示例。 如您所见,有一个日期列。使用 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
我不确定你为什么在这里使用 pmap_dfr。你想映射什么?
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)
哪个returns
a b c d
<chr> <chr> <chr> <chr>
1 character numeric numeric Date
map_dfr()
的工作方式是将函数(在本例中为 class())应用于数据框中的每一列。您无需在函数中写出列,只需获取数据框,地图即可完成拆分工作。
这是 pmap_dfr 的一个已知问题。参见 https://github.com/tidyverse/purrr/issues/358