zoukankan      html  css  js  c++  java
  • data.frame和matrix的一些操作

    编写脚本的时候经常会涉及到对data.frame或matrix类型数据的操作,比如取指定列、取指定行、排除指定列或行、根据条件取满足条件的列或行等。在R中,这些操作都是可以通过简单的一条语句就能够实现的,非常的简洁优美~

    下面就是一个小小的总结:
    1. 对data.frame或matrix取指定行
    data[i,] #取data中的第i行
    data[c(i,j,k),] #取data中的第i,j,k行

    取指定列的操作同理可得

    2. 对data.frame或matrix删除指定行
    data[-i,] #排除data中的第i行
    data[c(-i,-j,-k),] #排除data中的第i,j,k行

    3. 根据条件取满足条件的行
    例如:
    假定data为data.frame类型,第一列列名为type,取type为I的所有行:
    data[data$type=='I',]

    假定data为matrix类型,取第一列为I的所有行:
    data[data[,1]=='I',]

    *******************************************************************

    2:无名称的数据框
    2.1建立:
    > tmp_frame<-data.frame(c(1:10),c(1),c(10:1));tmp_frame
    c.1.10. c.1. c.10.1.
    1   1   1 10
    2   2   1  9
    3   3   1  8
    4   4   1  7
    5   5   1  6
    6   6   1  5
    7   7   1  4
    8   8   1  3
    9   9   1  2
    10 10 1  1
    默认左侧是列序号,不足的项使用重复项列出(不是0)

    2.2数据索引-无名称:
    ============点==========================
    2.2.1 直接读取点数据
    > tmp_frame[10,1]
    [1] 10
    ===========行===========================
    2.2.2 读取1行并产生数据框
    > tmp_frame[3,](一个1行3列的数据框)
    c.1.10. c.1. c.10.1.
    3 3 1 8
    2.2.3 读取n行并产生数据框
    > tmp_frame[1:3,](是3行3列的数据框。依据行读取部分)
    c.1.10. c.1. c.10.1.
    1 1 1 10
    2 2 1 9
    3 3 1 8
    ===========列==========================
    2.2.4 读取1列并产生数据框
    tmp_frame[1](是1行10列的数据框)
    c.1.10.
    1 1
    2 2
    3 3
    4 4
    5 5
    6 6
    7 7
    8 8
    9 9
    10 10
    2.2.5 读取n列并产生数据框
    > tmp_frame[1:2](是10行2列的数据框。依据列读取部分)
    c.1.10. c.1.
    1 1 1
    2 2 1
    3 3 1
    4 4 1
    5 5 1
    6 6 1
    7 7 1
    8 8 1
    9 9 1
    10 10 1
    2.2.6 读取1列并产生向量
    > tmp_frame[,1]
    [1] 1 2 3 4 5 6 7 8 9 10
    (注意tmp_frame[,1:2]和tmp_frame[1:2]一样,均是数据框)
    > tmp_frame[1:3,3]
    [1] 10 9 8
    ===========列序号地址================
    2.2.7which函数
    > which(tmp_frame[,3]==9)(向量tmp_frame[,3]等于9的序号地址—一个则是点数据)
    [1] 2
    > which(tmp_frame[,2]==1)(向量tmp_frame[,2]等于1的序号地址—多个则是向量)
    [1] 1 2 3 4 5 6 7 8 9 10
    > tmp_frame[which(tmp_frame[,3]==9),1](行为tmp_frame的第3列等于9的行,列为1 的点数据)—推荐
    [1] 2

    3有名称的数据框
    3.1添加名称
    定义时,直接定义列名称—推荐
    > tmp_frame<-data.frame(a=c(1:10),b=c(1),k=c(10:1));tmp_frame
    a b k
    1 1 1 10
    2 2 1 9
    3 3 1 8
    4 4 1 7
    5 5 1 6
    6 6 1 5
    7 7 1 4
    8 8 1 3
    9 9 1 2
    10 10 1 1
    定义后,再直接定义列名称
    > colnames(tmp_frame)<-c(“a1″,”b1″,”k1″);tmp_frame
    a1 b1 k1
    1 1 1 10
    2 2 1 9
    3 3 1 8
    4 4 1 7
    5 5 1 6
    6 6 1 5
    7 7 1 4
    8 8 1 3
    9 9 1 2
    10 10 1 1
    定义后,再直接定义行名称
    > rownames(tmp_frame)<-c(“row1″,”row2″,”row3″,”row4″,”row5″,”row6″,”row7″,”row8″,”row9″,”row10″);tmp_frame
    a1 b1 k1
    row1 1 1 10
    row2 2 1 9
    row3 3 1 8
    row4 4 1 7
    row5 5 1 6
    row6 6 1 5
    row7 7 1 4
    row8 8 1 3
    row9 9 1 2
    row10 10 1 1
    3.2数据索引
    3.2.1读取列组成向量—推荐
    > tmp_frame$a1
    [1] 1 2 3 4 5 6 7 8 9 10
    3.2.2读取点数据
    > tmp_frame$k1[4](是4行3列的点数据)—推荐
    [1] 7
    > tmp_frame[4,]$k1(是4行3列的点数据)
    [1] 7

    4数据框扩展
    4.1行扩展
    > rbind(tmp_frame,c(2,5,9))
    a1 b1 k1
    row1 1 1 10
    row2 2 1 9
    row3 3 1 8
    row4 4 1 7
    row5 5 1 6
    row6 6 1 5
    row7 7 1 4
    row8 8 1 3
    row9 9 1 2
    row10 10 1 1
    11 2 5 9
    > rbind(tmp_frame,row11=c(2,5,9))
    a1 b1 k1
    row1 1 1 10
    row2 2 1 9
    row3 3 1 8
    row4 4 1 7
    row5 5 1 6
    row6 6 1 5
    row7 7 1 4
    row8 8 1 3
    row9 9 1 2
    row10 10 1 1
    row11 2 5 9
    4.2列扩展
    > cbind(tmp_frame,k11=c(2,5,9,1:7))
    a1 b1 k1 k11
    row1 1 1 10 2
    row2 2 1 9 5
    row3 3 1 8 9
    row4 4 1 7 1
    row5 5 1 6 2
    row6 6 1 5 3
    row7 7 1 4 4
    row8 8 1 3 5
    row9 9 1 2 6
    row10 10 1 1 7

  • 相关阅读:
    代码性能优化-1
    sql调优-1
    2020.11.08 字符串可以是对象
    2020.11.09 JavaScript运算符
    2020.11.10 JavaScript 比较
    2020.11.11
    2020.11.12 条件语句
    2020.11.13 switch语句
    2020.11.14 循环
    2020.11.15
  • 原文地址:https://www.cnblogs.com/549294286/p/3284680.html
Copyright © 2011-2022 走看看