已经回国14天啦。明天我就能恢复“人(jie)身(chu)自(ge)由(li)”了!!我心心念念的小龙虾和烧烤啊。我来了!!
好了,现在讲正事,今天主要讲如何按照自己的需求过滤dataframe中的数据。
和dataframe相关的操作
创建一个dataframe
data.frame()
# dat有两列,分别为gene和mut
dat '211899_s_at',] ,
mut= group_list)
向dataframe中添加新的一列
dataframe$列名
# 添加group列
exprSet_L$group=rep(group_list,each=nrow(exprSet))
提取/修改行名和列名
colname()
rowname()
# as.data.frame() 强制转换为dataframe
dataframe取子集
# 使用行数、列出取子集
dataframe[row indices,colum indices]
mydata[1:2,1]
# 通过列名取子集
mydata['x1']
# 通过TRUE和FALSE并配合which()函数取子集
dataframe[which(dataframe$gender == "M"), ]
# 这个方法本质上是通过行数和列数取子集,which()函数将逻辑值转换为索引值(index)。
过滤数据
“==”
# eg2probe是dataframe,取symbol是'TRAF4'的数据
eg2probe[eg2probe$symbol=='TRAF4',]
unique()
# 去除重复项
unique()
unique(ids$symbol)
duplicate() # 如果是重复值返回TRUE,否则返回FALSE
# 删除var中的重复值
df[!duplicated(df$var),]
dim()
一般用于检测过滤前后数据集的差别
%in%
# A %in% B, 取A和B的交集
# 保留同时出现在exprset和ids中的探针id
exprSet[rownames(exprSet) %in% ids$probe_id,]
subset系列函数
subset.data.frame(dataframe,过滤条件)
subset.data.frame(x,x$name == "zhang") # 选出name = “zhang”的所有行
subset.matrix(matrix,过滤条件)
对数据排序
sort()
match(x, table, nomatch = NA_integer_, incomparables = NULL)
# x:被匹配的向量
# table:其他向量跟该向量进行匹配,x向量中的每一个元素都跟table向量中的每一个元素进行比较
# match()函数返回的是一个整数向量,长度和参数x相同,每一个元素的值是x元素第一次匹配table元素的位置,如果x元素不在table向量中,返回NA。
ids[match(rownames(exprSet),ids$probe_id),]
which 函数
which()
# 返回TRUE的索引值(index)
which(test TRUE, FALSE, TRUE, NA, FALSE, FALSE, TRUE))
> [1] 1 3 7
which.max()
which.min()
处理NA
is.na() # 如果是na返回TRUE,否则返回FALSE
na.omit()
with/within
-
with
函数只能定义一个变量,而within
函数可以定义多个变量 -
with
函数的返回值是原语句的返回值。within
跟with
功能相同,但返回值不同,within
会返回所有修改生效后的原始数据结构(列表、数据框等)
# 数据框或列表作为环境,自由的调用其中的对象,简单来讲就是数据框里面的列向量可以直接使用了,不用写dataframe$列名
mydata 2, 2, 6, 4), x2 = c(3, 4, 2, 8))
> mydata
x1 x2
1 2 3
2 2 4
3 6 2
4 4 8
with 和 within 功能对比
a > a
[1] 5 6 8 12
b > b
x1 x2 sumx
1 2 3 5
2 2 4 6
3 6 2 8
4 4 8 12
within()定义多变量
within(mydata, {sumx = x1 + x2; meanx = (x1 + x2)/2})
# 多个表达式用“;”隔开
# 此处within也不能换成with,因为定义了两个表达量sumx和meanx
>
x1 x2 meanx sumx
1 2 3 2.5 5
2 2 4 3.0 6
3 6 2 4.0 8
4 4 8 6.0 12
备注
当with/within中只包含一个表达式时,“=”要用“
字符串
paste()
paste0()
paste("a" ,1:5,sep ="")
> [1] "a1" "a2" "a3" "a4" "a5"
# 批量命名
colnames(matrix) 1:ncol(matrix),sep='_')