首先,感谢你对其他帖子的回答,这对我帮助很大。这是我的第一个。
我有这样的数据:
[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
我想把它转换成
[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“。但重要的是要保留它。
发布于 2019-05-14 22:51:07
假设它是Year.month,有多种方法可以做到这一点。将其转换为yearmon
类(从zoo
),然后更改format
library(zoo)
format(as.yearmon(as.character(v1), format = "%Y.%m"), "%Y-%m")
#[1] "1986-05" "1986-06" "1986-07"
或者,可以通过使用sub
将.
替换为-
来实现
sub(".", "-", v1, fixed = TRUE)
#[1] "1986-05" "1986-06" "1986-07"
如果该值是数值,它将无法区分1986.1
和1986.10
。一种选择是读取为字符向量/列('v2'),然后对其进行处理
format(as.yearmon(v2, format = "%Y.%m"), "%Y-%m")
#[1] "1986-01" "1986-10" "1986-05"
数据
v1 <- c(1986.05, 1986.06, 1986.07)
v2 <- scan(text = "1986.1,1986.10,1986.5", what = "", sep=",", quiet = TRUE)
发布于 2019-05-14 23:13:14
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;
https://stackoverflow.com/questions/56133180
复制相似问题