dttm
数値IDベクトルに応じて、さまざまなタイムゾーンに合わせて変数を操作しようとしています。新しい値として文字ベクトルを使用しても、IDに応じて変数を問題なく操作できます。ただし、このdate_time()
関数を使用して新しい値を作成しようとすると、各値はの最初の項目の結果を受け取りますcase_when
。
idベクトルは数値であり、クラスを因子と文字に変換しようとしました。この問題は関係しています。
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#>
#> date
df1 <- tibble(
id = c(1, 2, 3),
date_time = rep(as_datetime("2018-01-01 12:34:56", tz = "Europe/Zurich"), 3)
) %>%
mutate(
date_time2 = case_when(
id == 1 ~ "one",
id == 2 ~ "two",
TRUE ~ "three"
)
)
df2 <- tibble(
id = c(1, 2, 3),
date_time = rep(as_datetime("2018-01-01 12:34:56", tz = "Europe/Zurich"), 3)
) %>%
mutate(
date_time2 = case_when(
id == 1 ~ as_datetime(date_time, tz = "America/New_York"),
id == 2 ~ as_datetime(date_time, tz = "Asia/Kolkata"),
TRUE ~ date_time
)
)
df3 <- tibble(
id = c(1, 2, 3),
date_time = rep(as_datetime("2018-01-01 12:34:56", tz = "Europe/Zurich"), 3)
) %>%
mutate(
date_time2 = case_when(
id == 1 ~ as_datetime(date_time, tz = "Asia/Kolkata"),
id == 2 ~ as_datetime(date_time, tz = "America/New_York"),
TRUE ~ date_time
)
)
df1
#> # A tibble: 3 x 3
#> id date_time date_time2
#> <dbl> <dttm> <chr>
#> 1 1 2018-01-01 12:34:56 one
#> 2 2 2018-01-01 12:34:56 two
#> 3 3 2018-01-01 12:34:56 three
df2
#> # A tibble: 3 x 3
#> id date_time date_time2
#> <dbl> <dttm> <dttm>
#> 1 1 2018-01-01 12:34:56 2018-01-01 06:34:56
#> 2 2 2018-01-01 12:34:56 2018-01-01 06:34:56
#> 3 3 2018-01-01 12:34:56 2018-01-01 06:34:56
df3
#> # A tibble: 3 x 3
#> id date_time date_time2
#> <dbl> <dttm> <dttm>
#> 1 1 2018-01-01 12:34:56 2018-01-01 17:04:56
#> 2 2 2018-01-01 12:34:56 2018-01-01 17:04:56
#> 3 3 2018-01-01 12:34:56 2018-01-01 17:04:56
reprexパッケージ(v0.2.1)によって2019-03-26に作成されました
df1
私が期待することを示しています。
ではdf2
、== 2で、「2018-01-01 06:34:56」ではなく、「2018-01-0117:04:56」が表示されることを期待date_time2
していid
ます。
ではdf3
、== 3で、「2018-01-0117:04:56」ではなく「2018-01-0112:34:56」が表示されることを期待date_time2
していid
ます。
これはバグのようです(dpylr
以前に日付に問題があったため、おそらくのです)。
これが回避策の可能性です(なぜそれが機能するのか私に聞かないでください:))
tibble(
id = c(1, 2, 3),
date_time = rep(as_datetime("2018-01-01 12:34:56", tz = "Europe/Zurich"), 3)
) %>%
mutate(
date_time2 = case_when(
id == 1 ~ as_datetime(as.character(as_datetime(date_time, tz = "America/New_York"))),
id == 2 ~ as_datetime(as.character(as_datetime(date_time, tz = "Asia/Kolkata"))),
TRUE ~ as_datetime(as.character(date_time))
)
)
# A tibble: 3 x 3
id date_time date_time2
<dbl> <dttm> <dttm>
1 1 2018-01-01 12:34:56 2018-01-01 06:34:56
2 2 2018-01-01 12:34:56 2018-01-01 17:04:56
3 3 2018-01-01 12:34:56 2018-01-01 12:34:56
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加