这是对这个问题的伪跟进:为什么ggplot绘制空百分比数据点?
假设这是我的数据集:
Date AE AA AEF Percent
1/1/2012 1211 1000 3556 0.03
1/2/2012 100 2000 3221 0.43
1/3/2012 3423 10000 2343 0.54
1/4/2012 10000 3000 332 0.43
1/5/2012 2342 500 4435 0.43
1/6/2012 2342 800 2342 0.23
1/7/2012 2342 1500 1231 0.12
1/8/2012 111 2300 333
1/9/2012 1231 1313 3433
1/10/2012 3453 5654 222
1/11/2012 3453 3453 454
1/12/2012 5654 7685 3452
> str(data)
'data.frame': 12 obs. of 5 variables:
$ Date : Factor w/ 12 levels "10/11/2012","10/12/2012",..: 1 2 3 4 5 6 7 8 9 10 ...
$ AE : int 1211 100 3423 10000 2342 2342 2342 111 1231 3453 ...
$ AA : int 1000 2000 10000 3000 500 800 1500 2300 1313 5654 ...
$ AEF : int 3556 3221 2343 332 4435 2342 1231 333 3433 222 ...
$ Percent: num 0.03 0.43 0.54 0.43 0.43 0.23 0.12 NA NA NA ...
Run Code Online (Sandbox Code Playgroud)
我需要一些东西告诉'Date'列是Date类型而不是数字或字符类型(这是因为我必须将数据输入的'Date'列转换为as.Date()的实际Date ,ASSSUMING,我不知道数据集的列名称).
is.numeric(data[[1]]) returns False
is.character(data[[1]]) returns False
Run Code Online (Sandbox Code Playgroud)
我在Excel中创建了"日期"列,以"日期"格式格式化列,然后将文件另存为csv.这是什么类型的R?我寻找一个类似于上面的表达式返回TRUE.
Eld*_*rov 18
使用inherits来检测是否有参数的数据类型Date:
is.date <- function(x) inherits(x, 'Date')
sapply(list(as.Date('2000-01-01'), 123, 'ABC'), is.date)
#[1] TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
如果要检查是否可以转换字符参数,请Date使用以下命令:
is.convertible.to.date <- function(x) !is.na(as.Date(as.character(x), tz = 'UTC', format = '%Y-%m-%d'))
sapply(list('2000-01-01', 123, 'ABC'), is.convertible.to.date)
# [1] TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
the*_*ail 13
您可以尝试强制所有列,as.Date并查看哪些列成功.您需要指定您希望日期的格式.例如:
data <- data.frame(
Date=c("10/11/2012","10/12/2012"),
AE=c(1211,100),
Percent=c(0.03,0.43)
)
sapply(data, function(x) !all(is.na(as.Date(as.character(x),format="%d/%m/%Y"))))
#Date AE Percent
#TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
OP 明确要求只进行检查:
我需要一些东西来告诉“日期”列是日期类型
那么 R 附带了多少个日期类?正好两个:Date和POSIXt(不包括它们的衍生物,如POSIXct和POSIXlt)。
所以我们可以检查一下,并使其比已经给出的答案更可靠:
is.Date <- function(x) {
inherits(x, c("Date", "POSIXt"))
}
Run Code Online (Sandbox Code Playgroud)
尽可能坚固。
is.Date(as.Date("2020-02-02"))
#> [1] TRUE
is.Date(as.POSIXct("2020-02-02"))
#> [1] TRUE
is.Date(as.POSIXlt("2020-02-02"))
#> [1] TRUE
Run Code Online (Sandbox Code Playgroud)
如果您想知道列是否可以成功转换/强制为日期类型,那么这是另一个问题。这符合以下要求:“告诉 [...] 是日期类型”。
我知道这个问题很旧,但是我确实想提一下,现在lubridate包中还有一个函数,is.Date并且is.POSIXt
sapply(list(as.Date('2000-01-01'), 123, 'ABC'), is.Date)
[1] TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30928 次 |
| 最近记录: |