R语言-基本数据类型

#2.1.1基本数据类型
class()
#显示一个数据对象的数据类型
as.factor()
#把其他类型数据转换成因子型
as.character()
#把其他类型数据转换成字符型
is.character()
#查看数据类型是否为字符型,同理is.factor()
object.size()
#观察数据大小
#(一)
#数值型(numeric)
a=2; class(a)
#R会把所有超过电脑存储限制的数字当作正无穷,这个限制大约为1.8*10^38
#一旦算式中有正无穷或者负无穷的子项出现,结果就会是无穷或者是NaN(Not a Number)的数
exp(1000)#正无穷
-10/0#负无穷
exp(990)#正无穷
exp(1000)/exp(990)#NaN类型,原本应该是exp(10),但是由于子项都是正无穷
#(二)
#字符型(character)
a="2"
class(a)
b="想你"
class(b)
1+"1" 
#错误,non-numeric argument to binary operator
#(三)
#逻辑性(logical)
#TRUE FALSE
#在R中,TRUE对应数字1,FALSE对应数字0
TRUE+FALSE
TRUE>FALSE
#(四)
#因子型数据(factor)
(genders = factor(c("男","女","女","男","男")))
is.factor(genders)
class(genders)
#改变因子型数据各水平的编码顺序
(class=factor(c("Poor","Improved","Excellent"),ordered = T, levels =c("Poor","Improved","Excellent")))
#什么时候需要把字符型数据转换成因子型数据呢?
#定性变量和定序变量
#如:在作图中需要对数据分组,用来分组的变量就应该变成因子型
#如:需要做包含定性变量的回归模型,定性变量就要变成因子型进入模型
#(五)
#时间型数据(Date/POSIXct/POSIXlt)
#以字符串形式输入R中
#Date日期数据,它不包括时间和时区信息
#POSIXct/POSIXlt类型数据,包括日期、时间和时区信息
#Date自动识别以斜杠(2020/12/22)和短横线(2022-12-22)
#用as.Date()转换
#例:
moviedate="2020/12/22"
class(moviedate)
##[1] "character"
moviedate=as.Date(moviedate)
moviedate
##[1] "2020-12-22"
class(moviedate)
##[1] "Date"
#日期格式示意表(《R语言:从数据思维到数据实战》 Page49)
x<-c("1Jan1960","31mar1978")
y<-as.Date(x)
##Error in charToDate(x) : 字符串的格式不够标准明确
y<-as.Date(x,"%d%b%Y")
y
##[1] "1960-01-01""1978-03-31"
dates <- c("02/27/92", "02/27/92")
as.Date(dates, "%m/%d/%y")
##[1] "1992-02-27" "1992-02-27" 
#POSIXct/POSIXlt是精确到秒级的时间戳
#as.POSIXct()
as.POSIXct("2020-12-22 14:05:31")
##[1] "2020-12-22 14:05:31 CST"
as.POSIXct("December-22-2020 14:05:31")
##Error in as.POSIXlt.character(x, tz, ...) : 字符串的格式不够标准明确
as.POSIXct("December-22-2020 14:05:31", format = "%B-%d-%Y %H:%M:%S")
##[1] "2020-12-22 14:05:31 CST"
#format()可以用来更改时间数据的输出格式
#例:
(n=c("2016-03-14","2016-02-08")) #原始日期数据
m<-as.Date(n)
class(m)
##[1] "2016-03-14" "2016-02-08"
format(m,format = "%B %d %Y") #改成月日年的格式
##[1] "三月 14 2016" "二月 08 2016"
format(m,format = "%B %d %Y %A") #加入星期的信息
##[1] "三月 14 2016 星期一" "二月 08 2016 星期一"
format(m,format = "%B") #只提取月份的信息
##[1] "三月" "二月"
Sys.time() #输出系统时间
##[1] "2020-12-22 14:30:19 CST"
class(Sys.time()) #查看时间类型
##[1] "POSIXct" "POSIXt" 
format(Sys.time(),format="%B %d %Y") #提取部分时间信息
##[1] "十二月 22 2020"
format(Sys.time(),format = "%Y %B %a %H:%M:%S") #提取部分时间信息
##[1] "2020 十二月 周二 14:37:21"
#lubridate是一款专门高效处理时间数据的包
#主要有两类函数
#一类处理时点数据
#另一类处理时段数据
#例:
library(lubridate) #加载包
#额外备注:require()和library()都可以加载包,当加载一个不未下载的包时:require()会发出警告但继续执行程序,如果将其赋值给X<-require("xixihaha"),查看X可知返回了FALSE;而library()则会终止运行程序,并报错。因此,写R程序的常用技巧为(举例):
#额外备注:if(!require("cluster")) install.packages("cluster")
#额外备注:library(cluster)
x= c(20090101,"2009-01-02","2009 01 03","2009-1-4","2009-1,5","Created on 2009 1 6", "200901 !!! 07")
ymd(x)
##[1] "2009-01-01" "2009-01-02" "2009-01-03" "2009-01-04" "2009-01-05" "2009-01-06" "2009-01-07"
mday(as.Date("2020-12-22")) #Get/set days component of a date-time
##[1] 22
wday(as.Date("2020-12-22")) #Get/set days component of a date-time
##[1] 3
hour(as.POSIXct("2020-12-22 14:30:19")) #Get/set hours component of a date-time
##[1] 14
minute(as.POSIXct("2020-12-22 14:30:19")) #Get/set minutes component of a date-time
##[1] 30
#时间型数据的操作
#1、做差
begin=as.Date("2019-11-21")
end=as.Date("2020-12-22")
#方法一:直接相减
#求任意两个距离的天数
(during=end-begin)
##Time difference of 397 days
#方法二:或者用difftime()函数提取
#求任意两个日期距离的天数、周数和小时数
difftime(end,begin,units="days")
##Time difference of 397 days
difftime(end,begin,units="weeks")
##Time difference of 56.71429 weeks
difftime(end,begin,units="hours")
##Time difference of 9528 hours
#2、排序
#sort()  #将向量重新排序
#order() #返回一个向量升序排序后的数字在原数据中的位置
#具体看Page52
#################################
#总结#
class() #显示一个数据对象的数据类型
as.factor() #把其他类型数据转换成因子型
as.character() #把其他类型数据转换成字符型
is.character() #查看数据类型是否为字符型,同理is.factor()
object.size() #观察数据大小
as.Date() #Date自动识别以斜杠(2020/12/22)和短横线(2022-12-22)
format() #用来更改时间数据的输出格式
as.POSIXct() #POSIXct/POSIXlt是精确到秒级的时间戳
Sys.time() #输出系统时间
require() #加载包
library(lubridate) #加载包 #lubridate是一款专门高效处理时间数据的包
ymd(x) #library(lubridate)
mday(as.Date("2020-12-22")) #Get/set days component of a date-time
wday(as.Date("2020-12-22")) #Get/set days component of a date-time
hour(as.POSIXct("2020-12-22 14:30:19")) #Get/set hours component of a date-time
minute(as.POSIXct("2020-12-22 14:30:19")) #Get/set minutes component of a date-time
difftime() #求任意两个日期距离的天数、周数和小时数
################################
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值