R语言高级数据管理

############
####数学函数
############
abs(-1)
sqrt(2)
ceiling(3.434)
floor(3.434)
trunc(5.999)     #向0方向
round(3.4745, digits = 2)
signif(3.4745, digits = 2)
cos(30)
sin(30)
tan(30)
acos(0.2)
asin(0.2)
exp(2.3026)

############
####统计函数
############
my_vector <- c(11,27,3,49,5,6)
mean(my_vector)
median(my_vector)
var(my_vector)            #方差
mad(x)                    #绝对中位差
quantile(my_vector, c(.3, .75))
range(my_vector) 
sum(my_vector)
diff(my_vector, lag = 2)  #滞后差分
scale(my_vector, center = TRUE,
      scale = TRUE)

################
####均值和标准差
################
(new_data <- mtcars[1:10,])
#进行均值为0,标准差为1的标准化
scale(new_data)
#进行均值为5,标准差为2的标准化
scale(new_data) * 2 + 5
#仅对指定列进行标准化
transform(new_data, mpg = scale(mpg)*10 + 50)


############
####概率函数
############
#[dpqr]distribution_abbreviation()
#d--密度函数
#p--分布函数
#q--分位数函数
#r--生成随机数(随机偏差)

##norm分布的几个应用
#绘制标准正态分布曲线
x <- pretty(c(-3, 3), 30)
y <- dnorm(x)
plot(x, y,
     type = "l",
     xlab = "Normal Deviate",
     ylab = "Density",
     yaxs = "i")
#位于z=1.96左侧曲线下部分的面积
pnorm(1.96)
#均值为500,标准差为100的正态分布的0.9分位值
qnorm(0.9, mean = 500, sd = 100)
#生成50个均值为50,标准差为10的随机数
rnorm(50, mean = 50, sd = 10)

##设定随机种子
set.seed(1)
runif(5)
set.seed(1)
runif(5)

##生成多元正态数据
#使用MASS包的mvrnorm()函数
library(MASS)
options(digits = 3)
set.seed(123)
mean <- c(230.7, 146.7, 3.6)
(sigma <- matrix(c(15360.8, 6721.2, -47.1,
                   6721.2, 4700.9, -16.5,
                   -47.1,   -16.5, 0.3), nrow = 3, ncol = 3))
(my_data <- mvrnorm(50, mean, sigma))
(my_data <- as.data.frame(my_data))
names(my_data) <- c("y", "x1", "x2")
dim(my_data)        #查看维度
head(my_data, 10)


##############
##字符处理函数
##############
#计算x中的字符数量
x <- c("jdl", "sdfa", "djalfjla")
length(x)
nchar(x[3])
#提取或替换一个字符向量中的子串substr(x, start, stop)
x <- "ahlgjaag"
substr(x, 2, 5)
substr(x, 2, 4) <- "333"
x
#在x中搜索某种模式
grep("a", c("f", "s", "a"), fixed = TRUE)      #fixed=TRUE时搜索文本字符串
                                               #FALSE时搜索正则表达式
#在x中搜索pattern,并以replacement替换
#sub(pattern, replacement, x, ignore.case=FALSE, fixed=FALSE)
sub("\\s", ".", "Hello World")
#分隔字符向量strsplit(x, split, fixed=FALSE)
strsplit("jdfla", "", fixed = TRUE)
#连接字符串,分隔符为sep
paste("x", 1:5, sep = "M")
paste("Today is", date())
#大小写转化
toupper("dafafFFG")
tolower("dafafFFG")


###############
##其他实用函数
###############
#对象的长度
length("jldfj")
#生成一个序列
seq(1,10,2)
#将x重复n次
rep(1:3, 2)
#将连续型变量分隔为n个水平的因子
cut(1:7, 3)
cut(1:7, 3, ordered_result = TRUE)        #创建有序型因子
#连接对象
cat("Jane", "\n", c("Koby"))              #注意第二行会缩进一个空格,解决如下
cat("Jane", "\n", "\bKoby")


###############################
##将一个函数应用到数据框、行、列
###############################
my_data <- matrix(rnorm(30), nrow = 6)
mean(my_data)
apply(my_data, 1, mean)     #margin=1代表行,2代表列
apply(my_data, 2, mean)



#####################
##解决一个数学问题
#####################
#将学生的各科考试成绩组合为单一的成绩衡量指标,基于相对名次 (前20%、下20%、等等)给出从A到F的评分,根据学生姓氏和名字的首字母对花名册进行排序
options(digits=2)
#导入数据
Student <- c("John Davis", "Angela Williams", "Bullwinkle Moose",
               "David Jones", "Janice Markhammer", "Cheryl Cushing",
               "Reuven Ytzrhak", "Greg Knox", "Joel England",
               "Mary Rayburn")
Math <- c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522)
Science <- c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86)
English <- c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18)
(roster <- data.frame(Student, Math, Science, English,
                     stringsAsFactors = FALSE))
#计算综合得分
z <- scale(roster[, 2:4])
score <- apply(z, 1, mean)
(roster <- cbind(roster, score))
#对学生评分
(y <- quantile(score, c(.8, .6, .4, .2)))
roster$grade[score >= y[1]] <- "A"
roster$grade[score < y[1] & score >= y[2]] <- "B"
roster$grade[score < y[2] & score >= y[3]] <- "C"
roster$grade[score < y[3] & score >= y[4]] <- "D"
roster$grade[score < y[4]] <- "F"
#处理名字并按照其排序
name <- strsplit((roster$Student), " ")
Lastname <- sapply(name, "[", 2)
Firstname <- sapply(name, "[", 1)
roster <- cbind(Firstname,Lastname, roster[,-1])
roster <- roster[order(Lastname,Firstname),]
roster

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值