全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1223 5
2016-08-25
     我是刚刚学习R语言,学习得目的是要找一份数据分析的工作,虽然现在离这个目标很遥远,但坚信我会成功的多则一年半,少则3个月,在知乎上看到有人说学习R一定要在论坛里分享,找到志同道合的伙伴,那样学起来才有意思,学的也会更快和快乐。我的qq864748901,有一起学习得伙伴加我的qq,不过qq不经常用哈,不过没有关系可以扫一下下边的二维码加我的微信。感谢论坛给我这个机会,还有那位大牛觉得我是可塑之才,也可以指点我呀,哈哈,他日学成,必有所报,谢谢

我的微信二维码

  • R语言有五种基本类型(classes of objects):
    • 字符(character)
    • 数值(numer : real numbers)
    • 整数(integer)
    • 复数(complex)
    • 逻辑(logical : TRUE/FALSE)


  • R是一个大小写敏感的语言,赋值符号一定要用 <-




> x <- 1               #x赋值1
> x                    #输出x
[1] 1                  #[1]表示x的第一个元素
> class(x)             #查看x的类型
[1] "numeric"          #x是一个数值型变量,numeric可以使小数也可以是整数
> x <- 2L              #加上L表示2为整数类型
> x                    #输出x
[1] 2
> class(x)
[1] "integer"          #整数类型
> y <- "hello world"   #字符串要加上“”
> class(y)         
[1] "character"        #字符型

向量(vector)

  • 只能包含同一类型的变量       #最重要最常用

#Vector   


x <- vector("character", length = 10)   #使用vector函数生成类型为character的长度为10的空向量


x1 <- 1:4             #int类型
x2 <- c(1, 2, 3, 4)   #num类型  使用c函数
x3 <- c(TRUE, 10, "a")
x4 <- c("a", "b", "c")
as.numeric(x4)        #强制把x4转换成数值型向量
[1] NA NA NA
Warning message:
NAs introduced by coercion        #因为R不知道怎么把“a”, “b”, “c”转换成数值型,所以用NA(缺失值)来处理




as.logical()          #强制转换成逻辑型
as.character()        #强制转换成字符型




> names(x1) <- c("a", "b", "c", "d")    #给向量添加名称
> x1
a b c d
1 2 3 4


矩阵(matrix)
  • 向量+维度属性(整数向量:nrow, ncol

#matrix
> x <- matrix(nrow = 3, ncol = 2)     #用matrix函数创建一个矩阵,nrow表示行,ncol表示列
> x
     [,1] [,2]
[1,]   NA   NA
[2,]   NA   NA
[3,]   NA   NA



> x <- matrix(1:6, nrow = 3, ncol = 2)  #1:6表示,加入参数,矩阵的内容
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6

> dim(x)      #查看矩阵x的维度,多少行多少列
[1] 3 2       #x矩阵得维度为 3行2列

> attributes(x)   #查看矩阵x都有什么属性     
$dim             #有维度的属性
[1] 3 2

> y <- 1:6              #矩阵就是由向量 +
> dim(y) <- c(2,3)      #维度属性的
> y
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6



> y2 <- matrix(1:6, nrow = 2, ncol = 3)  
> y2              #创建一个同样的矩阵,便于矩阵的拼接
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> rbind(y,y2)    #按行对y,y2两个矩阵进行拼接
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
[3,]    1    3    5
[4,]    2    4    6
> cbind(y,y2)    #按列拼接
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    5    1    3    5
[2,]    2    4    6    2    4    6

数组(array) 不常用,了解一下
  • 与矩阵类似,但是维度可以大于2

#array


> x <- array(1:24, dim = c(4,6))  #dim表示设置维度
> x       #x是一个4行6列的数组,也是一个4行6列的矩阵
     [,1] [,2] [,3] [,4] [,5] [,6]     
[1,]    1    5    9   13   17   21
[2,]    2    6   10   14   18   22
[3,]    3    7   11   15   19   23
[4,]    4    8   12   16   20   24




> x1 <- array(1:24, dim = c(2, 3, 4)) #创建一个三位数组
> x1
, , 1    #第三个维度里第一个元素,从后往前直到遇到“矩阵”


     [,1] [,2] [,3]    #在第一个元素里边是一个2行3列的矩阵
[1,]    1    3    5
[2,]    2    4    6


, , 2


     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12


, , 3


     [,1] [,2] [,3]
[1,]   13   15   17
[2,]   14   16   18


, , 4


     [,1] [,2] [,3]
[1,]   19   21   23
[2,]   20   22   24

列表(list)
  • 可以包含不同类型的对象

#list


> l <- list("a", 2, 10L, 3+4i, TRUE)   #使用list函数创建一个列表
> l            #列
[[1]]          #表
[1] "a"        #的
               #样
[[2]]          #式
[1] 2


[[3]]
[1] 10


[[4]]
[1] 3+4i


[[5]]
[1] TRUE


> l2 <- list(a = 1, b = 2, c = 3)      #给列表l2中的对象命名
> l2
$a
[1] 1


$b
[1] 2


$c
[1] 3


#创建一个每个元素包含的元素个数大于1的列表
> l3 <- list(a = c(1, 2, 3), b = c(4, 5, 6, 7))
> l3
$a
[1] 1 2 3


$b
[1] 4 5 6 7


> x <- matrix(1:6, nrow = 2, ncol = 3)    #创建一个数组
> dimnames(x) <- list(c("a", "b"), c("c", "d", "e"))
> x           #用dimnames函数和一个列表给数组x得维度命名
  c d e
a 1 3 5
b 2 4 6


因子(factor)
  • 用来处理分类数据, 分类数据分为有序和无序
  • 有序数据,比如年级,低中高,还有年龄
  • 无序数据,比如性别,无法比大小
  • 可以把因子理解成一个整数型向量+一个标签label)(优于整数向量)

#factor

> f <- factor(c("female", "female", "male", "male", "female"))
> f
[1] female female male   male   female
Levels: female male     #Levels表示水平


> f2 <- factor(c("female", "female", "male", "male", "female"), levels = c("male", "female"))   #通过levels设置那个因子是基线水平
> f2
[1] female female male   male   female
Levels: male female   #谁在前谁就是基线水平,对以后统计分析非常重要


> table(f)            #对因子进行整体性的了解
f
female   male
     3      2


> unclass(f)   #去掉levels属性查看因子
[1] 1 1 2 2 1
attr(,"levels")
[1] "female" "male"  


> class(unclass(f))   #去掉levels后的类型为int
[1] "integer"


数据框 (data frame)数据分析经常用到
  • 经常存储表格数据(tabular data)
  • 和列表,矩阵的关系非常密切
  • 视为各元素长度相同的列表
    • 每个元素代表每一列数据
    • 每个元素的长度代表行数
    • 元素类型可以不同


#data frame

> df <- data.frame(id = c(1:4), name = c("chenhong", "qipengge", "yuxin", "zhoamiao"),gender = c(TRUE, FALSE, TRUE, FALSE))
> df         #按列排布
  id     name gender
1  1 chenhong   TRUE
2  2 qipengge  FALSE
3  3    yuxin   TRUE
4  4 zhoamiao  FALSE


> nrow(df)     #查看数据框df的行数
[1] 4
> ncol(df)     #查看数据框df的列数
[1] 3  


> df2 <- data.frame(id = c(1:4), score = c(80, 86, 90, 100))
> df2
  id score
1  1    80
2  2    86
3  3    90
4  4   100

> data.matrix(df2) #转换成矩阵
     id score
[1,]  1    80       #每个元素类型都一样,符合矩阵的要求
[2,]  2    86
[3,]  3    90
[4,]  4   100


未完待续


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-8-25 15:24:27
缺失值(missing value) 在数据预处理中经常用到


        * NA/NaN:NaN属于NA,NA不属于NaN
        * Nan一般用来表示数字的缺失值
        * NA表示范围更广,比如数字,字符
        * NA有类型属性,有integer NA, character NA等
        * is.na() / is.nan(),判断一个向量中是否有缺失值



#missing value

> m <- c(1, NA, 2, NA, 3)
> is.na(m)
[1] FALSE  TRUE FALSE  TRUE FALSE   #属于NA的为TRUE
> is.nan(m)
[1] FALSE FALSE FALSE FALSE FALSE   #属于NaN的为TRUE
> m2 <- c(1, NaN, 2, NaN, 3)
> is.na(m2)
[1] FALSE  TRUE FALSE  TRUE FALSE
> is.nan(m2)
[1] FALSE  TRUE FALSE  TRUE FALSE


日期(date )


        * 日期的类型属于Date
        *
                * 距离1970-01-01的天数 / date() / Sys.Date()
                * weekdays() / months() / quarters()



一月:January,二月:February,三月:March
四月:April,五月:May,六月:June
七月:July,八月:August,九月:September
十月:October,十一月:November,十二月:December

星期一: Mon.=Monday
星期二: Tues.=Tuesday
星期三: Wed.=Wednesday
星期四: Thur.=Thursday
星期五: Fri.=Friday
星期六: Sat.=Saturday
星期天: Sun.=Sunday


#date

d <- date()  #获取当前的日期
> d
[1] "Thu Aug 25 12:07:27 2016"

> class(d)    #查看d的类型
[1] "character"

> d2 <- Sys.Date()   #只获取当前的年,月,日
> d2
[1] "2016-08-25"
> class(d2)
[1] "Date"           #使用Sys.Date类型为Date


d3 <- as.Date("1994-03-29")   #输入一个日期
> weekdays(d3)                #查看输入日期是星期几
[1] "星期二"
> months(d3)                  #几月?
[1] "三月"
> quarters(d3)                #季度?
[1] "Q1"
> julian(d3)                  #1970-01-01过去多少天
[1] 8853
attr(,"origin")
[1] "1970-01-01"
d3 <- as.Date("1994-03-29")
d4 <- as.Date("2016-08-25")
> d4-d3
Time difference of 8185 days  #日期相减得多少
> as.numeric(d4-d3)           #只得一个整数,多少天
[1] 8185


时间(time)


        * 有两个类型 POSIXct / POSIXlt
        * 距离1970-01-01的秒数 / Sys.time()
        * POSIXct:整数,常用语存入数据框
        * POSLXlt:列表,还包含星期,年,月,日等信息


#time

> t <- Sys.time()     #获取当前时间
> t
[1] "2016-08-25 12:37:49 CST"
> class(t)            #当前时间的类型
[1] "POSIXct" "POSIXt"
#将刚才获取的时间转换成POSIXlt类型
> t2 <- as.POSIXlt(t)
> t2
[1] "2016-08-25 12:37:49 CST"
> class(t2)
[1] "POSIXlt" "POSIXt"

> names(unclass(t2))  #查看t2中的属性
[1] "sec"    "min"    "hour"   "mday"   "mon"    "year"   "wday"   "yday"   "isdst"  "zone"
[11] "gmtoff"

> t2$sec
[1] 49.99743
> t2$wday
[1] 4
> t2$hour
[1] 12

> as.POSIXct(t2)
[1] "2016-08-25 12:37:49 CST"
> class(t2)
[1] "POSIXlt" "POSIXt"

t3 <- "八月 25, 2016 13:57"   #中文软件一定要写中文的月份
strptime(t3, "%B %d, %Y %H:%M")   #月份B,日d,年Y,时H,分M
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-26 04:02:26
楼主加油。另外赋值用=也可以的
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-27 00:26:04
violinj 发表于 2016-8-26 04:02
楼主加油。另外赋值用=也可以的
谢谢,我看好多教程都是说最好用 <-,所以就顺着大家了,不过现在也习惯了,你也是R初学者吗?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-27 23:12:46
heishenuke 发表于 2016-8-27 00:26
谢谢,我看好多教程都是说最好用
零零散散有用过,最近在系统的从头开始学习巩固。一起加油咩~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-9-1 20:32:28
violinj 发表于 2016-8-27 23:12
零零散散有用过,最近在系统的从头开始学习巩固。一起加油咩~
嗯嗯,一起加油,另加一下我微信也是可以的,一起学习
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群