初探R——从无到有的记录

一、基本操作

1、mathmatic operations

与其他无异

2、注释

用 # 来引导一句注释

a->95 #this is a piece of explanation

3、数据类型及基本操作

r语言中的数据类型与python等类似,无需在定义的时候指定,各种数据类型也可以直接转换,如以下一段代码

 a = 1
 a = 'wk'

a最终会被定义为string ”wk”;

string

A String variable can be declared in either double quotes("") or single quotes (’’)

  • 赋值
A = 'wangsky'
A = "wangsky"
A <- "wangsky"
A <- 'wangsky'

以上四句指令运行结果相同

vector

与matlab和sas等数据处理语言类似,r语言中所有变量都是以向量或矩阵的形式储存的;

  • 赋值
a = c ( 1 ,2 ,3 )
b=c('a','b','c','d')
c=c("wangsky",1,2)

注意c的赋值会导致1和2都被储存为string类型
除了直接赋值外,还可以通过一些函数快速赋值,如下

a=1:5 ## a=[1,2,3,4,5]
a=seq(1:5) ## a=[1,2,3,4,5]
a=seq(1:10:2) ## a=[1,3,5,7,9]
a=rep(95,3) ## a=[95,95,95]
a=rep("wangsky",3) ## a=["wangsky","wangsky","wangsky"]
a=rep(c('wang','sky'),3) ## a=['wang','sky','wang','sky','wang','sky']

注意在r中数据用单引号‘’和双引号“”不会造成任何区别,都会被当作字符串处理
通过对新元素的赋值可以直接在vector中增加元素,没有被赋值的元素缺省值为NA

  • 查找元素indexing
    与数组的处理类似,不同的是其下标从1开始
a<-c(8,5,10,5)
a[1] ## 8

可以通过负数的index删除元素

a[-1] # [5,10,5] 但不会改变a的实际值
a=a[-2] # a变为[8,10,5]

index也可以是一个向量,这时可以一次性查找或重新赋值多个元素

ind=c(1,3)
a[ind] # 返回 [ 8 , 10 ]
a[c(2,4)]=c(50,50) # a变为[8,50,10,50]
a[1:2]=c(95,95) # a变为[95,95,10,50]
  • rdist() functions
    从指定分布(distribution)中随机抽取数据
runif(n = 10) # 10 samples from Unif(0, 1)  均匀分布
rnorm(n = 10) # 10 samples from Norm(0, 1) 正态分布
 rpois(n = 10) # 10 samples from Poisson(1)  泊松分布
 rexp(n = 10) # 10 samples from Exp(1) 指数分布
 
 # 100 samples from a Norm(20, 5) distribution 
 rnorm(n = 100, mean = 20, sd = 5)  # mean代表平均值,sd代表标准差

以上函数可以直接赋值给变量,会生成长度为n的向量
输入 ?Distributions可以获取所有可用的distributions

vector operations

  • 基本运算
    加减法与向量加减法相同
    乘除法都是分别每个元素相乘除
    幂次计算也是每个元素做幂次运算
    内积计算:
X=c(1:4)
X %*% X # dot (inner) product
#result is 30
  • 比较操作
    所有比较操作都是每个对应元素单独比较,返回长度为n的bool向量
    两个长度不相等的向量无法比较

  • Helpful Functions

mean(X)  # mean
sd(X) # standard deviation 标准差
var(X) # variance 方差
max(X) # maximum 
min(X) # minimum 
median(X) # median
sum(X) # sum 
prod(X) # product 所有元素乘积
quantile(X,probs=0.5) # quantile for specified probs 特定概率分位点
length(X) # length of the vector 
range(X) # range

4、Control and Functions

一个完整的实例,判断向量里的三个数能否构成三角形:

is_good <- function(vec) { # is_good是函数名,vec是变量名
	if (length(vec) != 3) { # 内置函数length
	# Always a good idea to make sure your function gets what it expects to get 		
	stop('is_good requires a vector of length 3') # 内置函数STOP
	} 
	for (i in 1:3) {
	 # Check if element i is greater than sum of other two elements 
		if (vec[i] > sum(vec[-i])) { 内置函数sum
 		return(FALSE) 
 		}
  	} 
  return(TRUE)
  }

5、Packages

install packages:install.packages(“package name”)
load packages:library(“package name”)
use functions without loading:package_name::function_name( )

二、Dataframes

Each column represents a variable/feature
Each row represents an observation/instance
需要以下package:

library("tidyverse") 

1、基础操作

tibble()用来创建一个data frame

data <- tibble( # start tibble() 
	age = c(24, 22, 23, 25, 22),
	personality = c('g', 'b', 'g', 'b', 'g'), 
	income = c(2000, 5800, 4200, 1500, 6000) 
) # finish the tibble() function 

$ 或者 [ ] 用来查找元素

data$age ## [1] 24 22 23 25 22 返回的列向量
data['age'] ## [1] 24 22 23 25 22 返回的是新dataframe
data[1] ## [1] 24 22 23 25 22 返回的是新的dataframe
data[1,2] ## [1]  22 
data[ ,2] ## [1] g b g b g
data[1, ] 24 'g' 2000

在[ ]中可以用列的名称代替数字,这是因为每一列在创建时都是有名字的
而行则不可以,只能用数字指代
如果 [ ] 中如果只有一个元素,则默认为行
[ ]中的index也可以是vector,返回的依旧是dataframe 例如:

data[1:3, c('age', 'income')]
data[c(1, 4), 2:3]

conditional indexing

#find the 22-year-olds 
ind <- data$age == 22 #先获得一个bool 向量
data[ind, ] # index rows by binary vector ind

Column names
colnames( dataname)函数可以用来查看列名称或者修改列的名称

colnames(data)=c('a','b','c')

2、读写

3、进阶操作 dplyr

str( dataname ) 函数用来展示完整的dataframe
unique(data_name$column_name) 返回该列所有的不同元素

dplyr is a package that provides a convenient framework (along with a handful of useful functions) for wrangling data (frames). dplyr is a part of the tidyverse
verb: A verb in the world of dplyr is a function that :

  • takes a data frame as its first argument, and
  • returns another data frame as a result
    Five basic verbs:
    Five basic verbs
3-1 SELECTING ROWS

filter():
filter(dataframe, conditions)
conditions can be:

  • bool表达式, i.e.: age>18&&gender==‘F’
  • %in% 来实现collection,i.e.: filter(data, age %in% c(15,20))

slice
slice可以按照行数选择
slice( my_data,1:10)
在verb里面用n()可以表示dataframe的总行数。如:
slice( my_data, (n()-20):n() )

3-2 SELECTING COLUMN

select:
select (my_data, length)
select(my_data,-width) # 除width行之外的所有行
还有其他一些有用的限制条件如end_with,begin_with
详情见:
? select

3-3 CREATING NEW COLUMNS

mutate:
mutate( data ,newcolumn=length/width ) #通常从已有的列中得到新列
transmute:
与mutate命令不同的是,该命令的返回值为只包含新列的一个dataframe

3-4 SORTING

arrange:sorting rows by column values
默认为升序,加dec()变为降序,可以对多个变量排序。如下:
arrange(diamonds, carat, price)
arrange(diamonds, carat, desc(price))
arrange(diamonds, desc(carat), desc(price))

3-5 AGGREGATING

summarize

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值