zoukankan      html  css  js  c++  java
  • R 语言处理excel为data.frame

    使用 R包 xlsx 或者 openxlsx

    安装

    install.packages("xlsx", repos="https://cloud.r-project.org/")

    install.packages("openxlsx", repos="https://cloud.r-project.org/")

    使用

    文件名+sheet的序号读取指定sheet的内容

    data <- read.xlsx("Lipstick.xlsx", sheet = 1)  # 读取excel

    View(data)

    ## data 为 data.frame

    # 读取 table 分隔的文本文件

    data = read.table(file.txt, sep=" ", header=T);

    访问 data.frame 的元素

    查看列名  colnames(data)

    查看行名  rownames(data)

    提取指定行

    data[2,]  提取第二行

    提取指定列 

    data[c("列名1", "列名2", "列名3")] 

    data[2]  提取第二列

    data[2:4]  提取第2-4列

     如果只访问1列,返回的是 vector 类型,可以使用 [[ ]] 或者 $ 来访问  data[[2]]  或者  data$列名

    默认情况下,字符串向量会被自动识别成 Factor

    向 data.frame 中添加新列  新添加的列的行数要和表中的列的行数相同

    data$新列名 <- 数据

    data$新列名 <- as.integer(format(Sys.Date(), "%Y")) - as .integer(format(sutdent$birthday, "%Y"))

    查询/子集

    查询一个data.frame,返回一个满足条件的子集,这相当于数据库中的表查询,是非常常见的操作。

    使用行和列的index来获取子集是最简单的方法,详情见前面。

    当然也可以使用布尔向量,配合which函数来实现对行的过滤。

    比如我们要查询所有Gender为F的数据,那么我们首先通过student$Gender=="F" 得到一个布尔向量:FALSE FALSE ... TRUE,然后使用 which 函数可以将布尔向量中的TRUE的index返回,完整语句如下

    student[which(student$Gender=="F")] 

    如果我们想知道所有女生的年龄,

    student[which(student$Gender=="F"), "Age"]

    另外可以直接使用 subset() 函数,比如把查询年龄改为 <30 的女性,查询姓名和年龄,如下

    subset(student, Gender=="F" & Age < 30,  select=c("Name", "Age"))

    使用SQL查询 Data Frame 使用 sqldf 包

    library(sqldf)

    result <- sqldf("select Name, Age from student where Gender='F' and Age > 30")

    连接/合并

    对于数据库来说,对多表进行 join 查询是一个很正常的事,在R中也可以对多个 Data.frame 进行连接,需要使用 merge() 函数

    result <- merge(student,score,by.x="ID",by.y="SID")

    使用 rbind() 函数 rbind 的两个 Data frame 必须有相同的列

  • 相关阅读:
    洛谷
    洛谷
    洛谷
    洛谷
    洛谷
    模板
    模板
    模板
    洛谷
    模板
  • 原文地址:https://www.cnblogs.com/0820LL/p/11155833.html
Copyright © 2011-2022 走看看