step01_1_array_apply
Q:
1、用seq和array创建1个3维的数组,该数组为3行5列4层
2、对上述数组的第三个维度求五分位数
A:
a <- array(seq(from=1,to=60,by=1),dim=c(3,5,4))
a
b <- apply(a,3,fivenum)
b
Result:
[,1] [,2] [,3] [,4]
[1,] 1.0 16.0 31.0 46.0
[2,] 4.5 19.5 34.5 49.5
[3,] 8.0 23.0 38.0 53.0
[4,] 11.5 26.5 41.5 56.5
[5,] 15.0 30.0 45.0 60.0
结果中是对每一层(第三个维度)数据求五分位数,所以有5行 (五分位数) 4列(四层)
step01_2_sapply_lapply
Q:
1、创建一个多元素的向量
2、学习一个函数file.creat,并创建以该向量为名字的文件
A:
?file.create
a <-1:3
b<-getwd()
creat_file<-function(x){file.create(paste0('./',a))}
lapply(a,creat_file)
step02_1_factor
Q:
1、创建大写字母A-F因子;
2、将H添加至上述因子中;
3、将B去掉,并将其从因子中去掉
A:
> tmp<-factor(LETTERS[1:6])
> tmp
[1] A B C D E F
Levels: A B C D E F
> levels(tmp) <-c(levels(tmp),'H')
> tmp
[1] A B C D E F
Levels: A B C D E F H
> tmp[7] <-'H'
> tmp
[1] A B C D E F H
Levels: A B C D E F H
> tmp<-tmp[ -2]
> tmp
[1] A C D E F H
Levels: A B C D E F H
> tmp <- droplevels(tmp) #droplevels对不存在的levels删除
> tmp
[1] A C D E F H
Levels: A C D E F H
思路:
①添加level
②添加factor
③利用droplevels()函数删除不存在的level
step02__2_split_tapply
Q:
依据flag的landmass对name进行分组,landmass<3的name分为一组,其他的分为一组
A:
load('flag.Rdata')
flag$size <-rep('big', nrow (flag))
flag$landmass<3 ##注意 返回的是逻辑值
flag$size[flag$landmass<3] <-'small' #在flag$size中将“flag$landmass<3”为T的结果返回
flag$size
tapply (flag$name,flag$size,c)
思路:
①审题:依照题目要求,待分组数据x为name;分组依据的标准是landmass>=3以及landmass<3
②构想分组依据的标签:landmass<3为lable1=small;landmass>=3为lable2=big
③设定符合name的全部行
④根据分组依据,进行设定
⑤利用tapply()函数进行分组设定
step03__1_while
Q:
随机生成平均值为2,sd为9的正态分布的20个数字;并while循环求当前位置前所有数据的最小值
A:
方法一:创建一个空向量,用空向量接住while的输出结果
k1 <- rnorm(20, mean = 2, sd = 9)
k1
min(1:rnorm(k1))
length(k1)
tmp <- c()
i <- 1
while (i <=length(k1)) {
tmp[i] <- min(k1[1:i])
i = i+1
}
方法二:直接print出while的输出结果(需提前了解while输出结果的数据结构)
k1 <- rnorm(20, mean = 2, sd = 9)
k1
min(1:rnorm(k1))
length(k1)
while (i <=20) {
print(min(k1[1:i]))
i = i+1
}
step03__2_ifelse
Q:
生成 1:20 的数据,使用 ifelse ifelse 循环, x<=8输出‘ small ’,8<x<=15 输出 ‘medium ’,15<x<=20输出“ big ”
A:
> k1 <- seq(from=1,to=20,by=1)
> k1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> ifelse(k1<=8,'small',ifelse(k1<=15,'medium','big'))
[1] "small" "small" "small" "small" "small" "small" "small" "small" "medium" "medium" "medium" "medium"
[13] "medium" "medium" "medium" "big" "big" "big" "big" "big"
> k1[k1>8&k1<=15] #表示k1大于8小于等于15 注意用&
[1] 9 10 11 12 13 14 15
step04_1_set_sort_rank_order
Q:
A:
library(ggplot2)
a <-ToothGrowth
class(x = ToothGrowth)
colnames(x = ToothGrowth)
table(ToothGrowth$supp)
a <- a[order(a$supp,-a$len),]
说明:
①对ToothGrowth进行命名时,注意ToothGrowth的格式
##命令:a <-data(ToothGrowth)是错误的,因为ToothGrowth)的格式就是data
##命令:a <-a <-’a <-ToothGrowth‘ 是错误的,因为’ToothGrowth ‘含义变了 就是一个字符串啊
②命令:a <- a[order(a$supp,-a$len),] 要加一个,因为对a的排序就是一个行的操作,a的数据格式为data.frame
思路:
①审题:对比前后顺序变化,发现按照len,supp两个条件进行排序的(×dose的顺序杂乱)
②选定排序函数:因为是两个条件,len,supp是两个data.frame,所以选定order
③注意细节,order返回的结果是输入数据的位置信息,而len为降序,所以要加负号,表示降序:-a$len
step05__2_character_operation`
Q1:
rm(list=ls())
options(stringsAsFactors = F)
load('pd.Rdata')
levels(pd$title) <- c(levels(pd$title),'EGF 12h replicate 3')
pd$title[12] <- 'EGF 12h replicate 3'
pd$title
[1] EGF 4h replicate 1 EGF 4h replicate 2 EGF 4h replicate 3
[4] Control for EGF 4h replicate 1 Control for EGF 4h replicate 2 Control for EGF 4h replicate 3 Control for EGF 12h replicate 1 Control for EGF 12h replicate 2 Control for EGF 12h replicate 3 EGF 12h replicate 1 EGF 12h replicate 2 EGF 12h replicate 3
13 Levels: Control for EGF 12h replicate 1 Control for EGF 12h replicate 2 ... EGF 12h replicate 3
将以上格式转换为:
"EGF_4h" "EGF_4h" "EGF_4h" "Control_EGF_4h" "Control_EGF_4h" "Control_EGF_4h" "Control_EGF_12h" "Control_EGF_12h" "Control_EGF_12h" "EGF_12h" "EGF_12h" "EGF_12h
这样的格式
A1:
rm(list=ls())
options(stringsAsFactors = F)
tmp<- as.character(pd$title)
class(tmp)
tmp
tmp[grep('C.+4',tmp)] <- rep('Control_EGF_4h',3)
tmp[grep('^E.+4',tmp)] <- rep('EGF_4h',3) ##去掉replicate+数字
tmp[grep('^C.+12',tmp)] <- rep('Control_EGF_12h',3) ##去掉replicate+数字
tmp[grep('^E.+12',tmp)] <- rep('EGF_12h',3)
tmp
Q2:
在ids.Rdata中symbol中寻找TP53
A2:
grep('TP53',ids$symbol)
grep('TP53',ids$symbol,value = T)
step05_3_match
Q1:
用merge中找到probe_id对应的symbol (在ids里面哦)
A1:
load('id.Rdata')
set.seed(0720)
id_num<- sample(1:nrow(ids),5)
id_num1 <- ids$probe_id[id_num]
library(hgu133a.db)
ids <- toTable(hgu133aSYMBOL)
class(id_num1)
id_num1 <- as.data.frame(id_num1)
class(id_num1)
colnames(id_num1) <- 'probe_id'
f<-merge(ids,id_num1 ,by='probe_id')
f
merge()输入对象的格式为data.frame;所以要判断merge的输入对象格式
Q2:
提取1255_g_at中的数字 用strsplit做练习
A2:
a <- '1255_g_at'
a <- strsplit(a,split = '_')
或者:a <- strsplit(a,split = '_')[[1]][1]
a <- unlist(a)
a[1]










网友评论