我有一种情况,我有很多维度表,其中一些包含日期属性,通常是ymd或ymd_hms,如字符串。我的目标是将所有日期变量重新格式化为Date类。由于有很多维度表,我决定将它们放在data.frames列表中,然后只循环遍历每一个维度表,用lubridate包中的ymd_hms函数解析维度data.frames的每一列,并选择那些正确解析并放入的列他们回到我原来的维度表。
但是,它发生了
ymd_hms(., truncated = 3)
也成功解析了一些根本不应解析的data.frame列......它们只是分类变量(存储为字符)。下面我提供一个例子。
library(dplyr)
library(lubridate)
my_test_df <-
structure(list(naziv.x = c("NI PODATKA", "TUJINA", "GRAD",
"LJUBLJANA", "CELJE", "VELIKA POLANA"),
datsp.x = c("2010-01-13 15:28:00", "2008-05-22 14:48:00",
"2007-03-29 12:14:00", "2007-03-29 12:14:00",
"2007-03-29 12:14:00", "2007-03-29 12:14:00")),
.Names = c("naziv.x",
"datsp.x"),
class = "data.frame",
row.names = c(NA, 6L))
这是我的data.frame:
naziv.x datsp.x
1 NI PODATKA 2010-01-13 15:28:00
2 TUJINA 2008-05-22 14:48:00
3 GRAD 2007-03-29 12:14:00
4 LJUBLJANA 2007-03-29 12:14:00
5 CELJE 2007-03-29 12:14:00
6 VELIKA POLANA 2007-03-29 12:14:00
这是我的代码,应该只成功解析第二列:
my_test_df %>%
mutate_each(funs(as.Date(ymd_hms(., truncated = 3))))
但它会导致下面的data.frame:
naziv.x datsp.x
1 2014-10-17 2010-01-13
2 2014-10-17 2008-05-22
3 2014-10-17 2007-03-29
4 2014-10-17 2007-03-29
5 2014-10-17 2007-03-29
6 2014-10-17 2007-03-29
为什么会这样?
我的sessionInfo如下:
R version 3.1.1 (2014-07-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=Slovenian_Slovenia.1250 LC_CTYPE=Slovenian_Slovenia.1250 LC_MONETARY=Slovenian_Slovenia.1250 LC_NUMERIC=C
[5] LC_TIME=Slovenian_Slovenia.1250
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.3.0.2 lubridate_1.3.3
loaded via a namespace (and not attached):
[1] assertthat_0.1 DBI_0.3.1 digest_0.6.4 lazyeval_0.1.9 magrittr_1.0.1 memoise_0.2.1 parallel_3.1.1 plyr_1.8.1 Rcpp_0.11.3
[10] stringr_0.6.2 tools_3.1.1
答案 0 :(得分:1)
您可以使用matches
,starts_with
,ends_with
,num_range
或contains
等来指定要应用该功能的列名称。如果您没有多列,只需使用列名称即可。我想没有指明任何东西,它会转到默认值即。 everything
并应用该功能。由于某些原因,在这种情况下,不date
格式的列naziv.x
获取今天的日期。我不知道这是不是一个错误。
my_test_df %>%
mutate_each(funs(as.Date(ymd_hms(., truncated = 3))), starts_with("datsp"))
# naziv.x datsp.x
#1 NI PODATKA 2010-01-13
#2 TUJINA 2008-05-22
#3 GRAD 2007-03-29
#4 LJUBLJANA 2007-03-29
#5 CELJE 2007-03-29
#6 VELIKA POLANA 2007-03-29