美文网首页数据分析、矩阵运算
R语言杂谈(五)---处理数据框

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

作者: 爱思考的照 | 来源:发表于2019-12-02 20:24 被阅读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)

    相关文章

      网友评论

        本文标题:R语言杂谈(五)---处理数据框

        本文链接:https://www.haomeiwen.com/subject/scafgctx.html