R 创建switch语句

R 创建switch语句,r,switch-statement,R,Switch Statement,最近,我需要将一系列日期从格式“2010年7月25日”转换为标准R格式“2010-07-25”: 为了解决这个问题,我想做一个12 case switch语句,返回一个月的数字表示形式;但是,R不支持本机交换机(至少,我找不到一个) 因此,创建开关的最类似R的方法是什么?这个答案的灵感来源于Python中使用的dict。不要使用本机开关,而是创建一个列表,该列表按月份名称编制索引,并带有数字等效值: months<-list("January"="01","February"="02","

最近,我需要将一系列日期从格式
“2010年7月25日”
转换为标准R格式
“2010-07-25”

为了解决这个问题,我想做一个12 case switch语句,返回一个月的数字表示形式;但是,R不支持本机交换机(至少,我找不到一个)


因此,创建开关的最类似R的方法是什么?

这个答案的灵感来源于Python中使用的
dict
。不要使用本机开关,而是创建一个
列表
,该列表按月份名称编制索引,并带有数字等效值:

months<-list("January"="01","February"="02","March"="03","April"="04","May"="05","June"="06","July"="07","August"="08","September"="09","October"="10","November"="11","December"="12")
现在我们已经按照我想要的方式格式化了数据

head(new.data$dateoccurred)
[1] 2004-04-09 2004-09-01 2005-02-07 2005-02-19 2005-02-22 2005-03-11
264 Levels: 2004-04-09 2004-09-01 2005-02-07 2005-02-19 2005-02-22 2005-03-11 2005-03-15 2005-03-19 2005-05-13 2005-06-28 2005-06-29 2005-07-05 ... 2009-12-22

这个答案的灵感来源于Python中使用的
dict
。不要使用本机开关,而是创建一个
列表
,该列表按月份名称编制索引,并带有数字等效值:

months<-list("January"="01","February"="02","March"="03","April"="04","May"="05","June"="06","July"="07","August"="08","September"="09","October"="10","November"="11","December"="12")
现在我们已经按照我想要的方式格式化了数据

head(new.data$dateoccurred)
[1] 2004-04-09 2004-09-01 2005-02-07 2005-02-19 2005-02-22 2005-03-11
264 Levels: 2004-04-09 2004-09-01 2005-02-07 2005-02-19 2005-02-22 2005-03-11 2005-03-15 2005-03-19 2005-05-13 2005-06-28 2005-06-29 2005-07-05 ... 2009-12-22

DrewConway很好地回答了切换问题。基本日期问题有专门针对它的功能。strptime()将字符串转换为标准时间对象,您可以根据需要设置格式

strptime("September 1, 2004", "%B %d, %Y")

[1] "2004-09-01"

(当然,上面表达式中的字符串常量可以替换为字符串向量)

DrewConway很好地回答了切换问题。基本日期问题有专门针对它的功能。strptime()将字符串转换为标准时间对象,您可以根据需要设置格式

strptime("September 1, 2004", "%B %d, %Y")

[1] "2004-09-01"

(当然,上面表达式中的字符串常量可以替换为字符串向量)

这是一个很好的技巧,Drew,但John的答案中确实有R-ish的方法。将日期字符串解析为
date()
类型(您可以使用etc-pp验证、计算、执行
difftime()
),然后重新格式化为您喜欢的任何其他文本表示形式。Drew,这是一个很好的技巧,但John的答案中确实有类似R的方法。将日期字符串解析为
date()
类型(您可以使用etc-pp验证、计算、执行
difftime()
),然后重新格式化为您喜欢的其他文本表示形式。谢谢,John。我不知道这个功能。谢谢你,约翰。我不知道这个功能。