首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >转换数据以在其上使用lubridate

转换数据以在其上使用lubridate
EN

Stack Overflow用户
提问于 2019-05-14 22:46:17
回答 2查看 75关注 0票数 2

首先,感谢你对其他帖子的回答,这对我帮助很大。这是我的第一个。

我有这样的数据:

代码语言:javascript
复制
 [1] 1986.05 1986.06 1986.07 1986.08 1986.09 1986.10 1986.11 1986.12 1987.01 1987.02 1987.03 1987.04 1987.05 1987.06

我想把它转换成

代码语言:javascript
复制
 [1] 1986-05 1986-06 1986-07 1986-08 1986-09 1986-10 1986-11 1986-12 1987-01 1987-02 1987-03 1987-04 1987-05 1987-06

我尝试使用gsub(),或者粘贴my data + "-01',但是这里有个问题:它将我的数据转换成第一个字符:1986.10变成1986-1

这应该是一个月,所以.10不同于.1。

我真的不能解释我是如何做到这一点的,但现在我真的想知道如何从R直接转换它!(在Excel上会更简单)

谢谢!

编辑:

我正在编辑我的帖子,以提供有关该问题的详细信息。

问题是大多数方法将列从数字转换为字符。

结果是1986年的1986.10个月变成了1986年的1986.1个月。似乎字符值的末尾不能有"0“。但重要的是要保留它。

EN

回答 2

Stack Overflow用户

发布于 2019-05-14 22:51:07

假设它是Year.month,有多种方法可以做到这一点。将其转换为yearmon类(从zoo),然后更改format

代码语言:javascript
复制
library(zoo)
format(as.yearmon(as.character(v1), format = "%Y.%m"), "%Y-%m")  
#[1] "1986-05" "1986-06" "1986-07"

或者,可以通过使用sub.替换为-来实现

代码语言:javascript
复制
sub(".", "-", v1, fixed = TRUE)
#[1] "1986-05" "1986-06" "1986-07"

如果该值是数值,它将无法区分1986.11986.10。一种选择是读取为字符向量/列('v2'),然后对其进行处理

代码语言:javascript
复制
format(as.yearmon(v2, format = "%Y.%m"), "%Y-%m")
#[1] "1986-01" "1986-10" "1986-05"

数据

代码语言:javascript
复制
v1 <- c(1986.05, 1986.06, 1986.07)
v2 <- scan(text = "1986.1,1986.10,1986.5", what = "", sep=",", quiet = TRUE)
票数 6
EN

Stack Overflow用户

发布于 2019-05-14 23:13:14

代码语言:javascript
复制
data have;
format year_mon_decimal_number 7.2; 
input year_mon_decimal_number @@; datalines;
1986.05 1986.06 1986.07 1986.08 1986.09 1986.10 1986.11 1986.12 1987.01 1987.02 1987.03 1987.04 1987.05 1987.06
run;

data want;
  set have;
  date = input (put(year_mon_decimal_number*100,6.), yymmn6.); 
  format date yymmd7.;
run;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56133180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档