数据分析、矩阵运算

R语言杂谈(五)---处理数据框

2019-12-02  本文已影响0人  爱思考的照

## 如何了解一个数据框

## 看头

head(exprSet) ##前6行

head(exprSet)[,1:5] ##选取1-5列

## 看尾

tail(exprSet)

tail(exprSet)[,1:3]

## class看属性,dim看维度,str看结构

class(exprSet)

dim(exprSet)  ##几行几列

str(exprSet) ##看每一列的结构,factor\num....

# 最直观的就是获取前10行,前10列进行观察判断

test <- exprSet[1:10,1:10]

##############################

# 获取第一行

test[1,]

# 获取第1列

test[,1]

## 使用$获取列

test$subgroup

# 选取第2到4行

test[2:4,]

# 选取第2到4列

test[,2:4]

# 选取第2到4行,3到5列

test[2:4,3:5]

##########################################################################

## 注意,我们可以通过位置获取,也可以通过行名和列名获取,还可以通过逻辑获取

##########################################################################

## 位置已经讲了

## 行名和列名呢?

## 其中行名获取的方法十分推荐,但是记住一点,行名不能重复

index <- rownames(test)

dd1 <- exprSet[index,]

dd2 <- exprSet[index,c("subgroup","sample","SAMD11")]

## 逻辑获取,先产生逻辑,再返回位置,再获取

test$subgroup == "Normal"

which(test$subgroup == "Normal") ##返回的是3和9

test[c(3,9),]

## 可以一步完成

test[test$subgroup == "Normal",]

## 在此基础上可以再选择列

test[test$subgroup == "Normal",c(1:5)]

## 难点在于产生正确的逻辑值

## 想一下,有多少种方法可以产生逻辑值??这个很重要

## 1.最重要的逻辑判断,如比较大小 2.函数产生,比如grepl,%in%

############################################################################

## 选行,选列,还有一个重要的函数subset

##subset,第一个数据,第二个选行(逻辑值),第三个是列,名称

test1 <- subset(test,test$subgroup == "Normal",select =c(1:5))

# 删掉第一列

test1 <- test[,-1]

# 增加一列

test1$subgroup <- test$subgroup ##增加的都位于最后面的位置

# 调整顺序,很常用

test1 <- test1[,c(10,1:9)] ##先选第10列后选1-9列

#获取名称

colnames(test)

rownames(test)

# 修改名称

colnames(test)[3:5] <- c("GeneA","GeneB","GeneC")

rownames(test)[1:2] <-c("sampleA","sampleB")

# 合并

## 加载数据

load(file = "bind.Rdata")

# 按列合并cbind

cbind2 <- cbind(cbindA,cbindB) ##将cbindB的列加在cbingA的后面,注意这里的id是一致的

cbind2 <- cbind2[,-5]   ###将多余的第5列删掉

# 交叉合并 merge,这个很重要,很常用,是芯片数据探针ID转换的基础。

## merge的逻辑,很常用首先按照某个因素intersect,再rbind

cbindm <- merge(cbindA,cbindC,by="id")  ##按id合并列,id取两者的交集然后合并

###如果我不会merge这个函数,那么可以按下面做

## 1,取交集,共有的名称

index <- intersect(cbindA$id,cbindC$id)

## 2.为了能用行名来获取,要产生行名

rownames(cbindA) <- cbindA$id

rownames(cbindC) <- cbindC$id

## 3.按照行名去获取两个子集,再用cbind按列合并

cbindme <- cbind(cbindA[index,],cbindC[index,c(2:4)])  ##第一列是id,我们前面有了就不要了,否则会造成重复

# 按行合并,rbind

rbind2 <- rbind(rbindA,rbindB)

上一篇下一篇

猜你喜欢

热点阅读