美文网首页数据-R语言-图表-决策-Linux-Python
R核心技术手册笔记(4 数据的存取和编辑)

R核心技术手册笔记(4 数据的存取和编辑)

作者: Thinkando | 来源:发表于2019-04-07 21:08 被阅读80次

    1. 文件导入

    • read.table 函数将文本文件读入R,并返回一个data.frame


      image.png
      image.png
    • readline


      image.png
    • scan


      image.png
      image.png
      image.png

    2. 导出数据

    • write.table


      image.png

    3. 合并数据

    1. paste 将多个字符型向量连接成一个向量,默认情况用空格分隔


      image.png
    2. cbind 按列合,增加列
    3. rbind 按行合,增加行

    4. 通过共同字段合并数据

    • merge, 一般用于两个数据框类型的整合,默认把相同的变量作为键


      image.png
    > id1 <- c(2, 3, 4, 5, 7)
    > heights <- c(62, 65, 71, 71, 67)
    > df1 <- data.frame(id = id1, heights)
    
    > id2 <- c(1, 2, 6:10)
    > weights <- c(147, 113, 168, 135, 142, 159, 160)
    > df2 <- data.frame(id = id2, weights)
    
    # all=FALSE,取交集
    > merge(df1, df2, all = FALSE)
      id heights weights
    1  2      62     113
    2  7      67     135
    > intersect(df1$id, df2$id)
    [1] 2 7
    
    # 取合集
    > merge(df1, df2, by = "id", all = TRUE)
       id heights weights
    1   1      NA     147
    2   2      62     113
    3   3      65      NA
    4   4      71      NA
    5   5      71      NA
    6   6      NA     168
    7   7      67     135
    8   8      NA     142
    9   9      NA     159
    10 10      NA     160
    
    # all.x 指df1, all.y 指df2
    > merge(df1, df2, by = "id", all.x = TRUE)
      id heights weights
    1  2      62     113
    2  3      65      NA
    3  4      71      NA
    4  5      71      NA
    5  7      67     135
    
    # 想合并的index 大于两列
    > df1$sex <- c("f", "m", "f", "f", "m")
    > df2$sex <- c("f", "f", "m", "m", "f", "f", "f")
    > merge(df1, df2)
      id sex heights weights
    1  2   f      62     113
    2  7   m      67     135
    > merge(df1, df2, by = c("id", "sex"))
      id sex heights weights
    1  2   f      62     113
    2  7   m      67     135
    > merge(df1, df2, by = "id")
      id heights sex.x weights sex.y
    1  2      62     f     113     f
    2  7      67     m     135     m
    

    5. 数据转换

    • 有时候,原始数据中有些变量可能有问题,本节介绍数据框常规操作
    ID=c(11,12,13)
    Name=c("Devin","Edward","Wenli")
    Gender=c("M","M","F")
    Birthdate=c("1984-12-29","1983-5-6","1986-8-8")
    student<-data.frame(ID,Name,Gender,Birthdate)
    
    > student
      ID   Name Gender  Birthdate
    1 11  Devin      M 1984-12-29
    2 12 Edward      M   1983-5-6
    3 13  Wenli      F   1986-8-8
    
    row.names(student)<-student$ID # 建立行索引
    student[1,] # 访问第一行
    student[,2] # 访问第二列
    
    idname<-student[1:2]  == idname<-student[c("ID","Name”)] # 访问两列
    
    student[[2]] == student[["Name"]] == student$Name  # 访问name
    # 同上
    with(student,{
      n<-Name
      print(n)
    })
    
    # 改变向量类型
    student$Name<-as.character(student$Name)
    student$Birthdate<-as.Date(student$Birthdate)
    
    # 增加一列
    student$Age<-as.integer(format(Sys.Date(),"%Y"))-as.integer(format(student$Birthdate,"%Y”))
    
    # 索引, 小括号里面返回逻辑变量,which true的指针
    student[which(student$Gender=="F"),]
    # 索引女性年龄
    student[which(student$Gender=="F"),"Age”]
    # subset 函数查询
    subset(student,Gender=="F" & Age<30 ,select=c("Name","Age"))
    

    5 转换函数

    1. transform 函数
    • 作用: 为原数据框添加新的列,改变原变量列的值,通过赋值NULL删除列变量
    用法: transform(‘data’,….)
    
    data就是要修改的data,  '…..'代表你要进行的修改
    
    e.g 
    
    1:transform(airquality, new.col = Wind^2)  
    
    #添加列new.col,每项的值为Wind中每项值的平方
    
    2: transform(airquality,Wind=NULL)
    
    # 删除原数据集中的Wind列
    
    3: transform(airquality,Wind=Month+Day)
    
    #将原数据集中Wind列的数据改成Month列+Day列的值
    
    
    ## 同样的,上面的3步可以放在一起进行,即在一个括号里,依次写就好了
    
    ## 注意,transform只能用于修改data.frame类型
    
    ## airquality为R中自带的数据集
    
    # transform可以用within函数代替,因为within还可以用在不是数据框格式的内容
    里,上面的例子可以用within改写:
    
    within(airquality,{new.col=Wind^2;rm(Wind);Wind=Wind^2})
    
    #这里需要注意的是大括号里不同的任务要用分好";"隔开,不能用逗号,后者就
    
    是两个任务在两行中,rm(变量名)和变量名=NULL是等价的,都是删除该列
    
    1. apply 函数
    • apply 函数可以对一个数组的每一个部分运行同一个函数
    • apply(X,MARGIN,FUN,...)
    • apply 函数有3个参数:X 是函数要用到的数组,FUN是函数名称,MARGIN用来指定函数将要在数组的哪个维度上运行
    > x<-1:20
    > dim(x)<-c(5,4)
    > x
         [,1] [,2] [,3] [,4]
    [1,]    1    6   11   16
    [2,]    2    7   12   17
    [3,]    3    8   13   18
    [4,]    4    9   14   19
    [5,]    5   10   15   20
    > apply(X=x, MARGIN=1,FUN=max) # 看第一行最大的数
    [1] 16 17 18 19 20
    
    x<-1:27
    dim(x)<-c(3,3,3)
    apply(X=x,MARGIN=1,FUN=paste,collapse=",") # 第一行粘贴
    
    1. lapply 函数允许在列表或者向量的每一个元素运行某个函数,并返回一个列表
    • sapply 函数返回一个向量或者矩阵
    > x<- as.list(1:5)
    > lapply(x,function(x) 2^x)
    [[1]]
    [1] 2
    
    [[2]]
    [1] 4
    
    [[3]]
    [1] 8
    
    [[4]]
    [1] 16
    
    [[5]]
    [1] 32
    
    > sapply(x,function(x) 2^x) # 返回一个向量或者矩阵
    [1]  2  4  8 16 32
    
    • mapply 函数, 是多元版本的sapply


      image.png

    6. plyr 包

    image.png
    image.png
    image.png
    image.png

    7 数据分段

    image.png
    image.png
    image.png

    相关文章

      网友评论

        本文标题:R核心技术手册笔记(4 数据的存取和编辑)

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