在 R 中,我们可以从存储在 R 环境外部的文件读取数据。我们还可以将数据写入将由操作系统存储和访问的文件中。R可以读取和写入各种文件格式,如csv,excel,xml等。
在本章中,我们将学习从 csv 文件中读取数据,然后将数据写入 csv 文件。该文件应存在于当前工作目录中,以便 R 可以读取它。当然,我们也可以设置自己的目录并从那里读取文件。
获取和设置工作目录
可以使用getwd()函数检查 R 工作区指向哪个目录。您还可以使用setwd()函数设置新的工作目录。
# Get and print current working directory.print(getwd())# Set current working directory.setwd("/web/com")# Get and print current working directory.print(getwd())
当我们执行上面的代码时,它会产生以下结果 -
[1] "/web/com/1441086124_"[1] "/web/com"
此结果取决于您的操作系统和您正在使用的当前目录。
输入为 CSV 文件
csv 文件是一个文本文件,其中列中的值用逗号分隔。让我们考虑名为input.csv的文件中存在的以下数据。
您可以通过复制和粘贴此数据来使用 Windows 记事本创建此文件。将文件另存为输入.csv使用记事本中的“另存为所有文件(*.*)”选项。
id,name,salary,start_date,dept1,Rick,623.3,-01-01,IT2,Dan,515.2,-09-23,Operations3,Michelle,611,-11-15,IT4,Ryan,729,-05-11,HR5,Gary,843.25,-03-27,Finance6,Nina,578,-05-21,IT7,Simon,632.8,-07-30,Operations8,Guru,722.5,-06-17,Finance
读取 CSV 文件
下面是read.csv()函数的简单示例,用于读取当前工作目录中可用的 CSV 文件 -
data <- read.csv("input.csv")print(data)
当我们执行上面的代码时,它会产生以下结果 -
id, name, salary, start_date,dept11 Rick623.30 -01-01IT22 Dan515.20 -09-23Operations33 Michelle 611.00 -11-15IT44 Ryan729.00 -05-11HR5NA Gary843.25 -03-27Finance66 Nina578.00 -05-21IT77 Simon 632.80 -07-30Operations88 Guru722.50 -06-17Finance
分析 CSV 文件
默认情况下,read.csv()函数将输出作为数据帧提供。这可以很容易地检查如下。我们还可以检查列数和行数。
data <- read.csv("input.csv")print(is.data.frame(data))print(ncol(data))print(nrow(data))
当我们执行上面的代码时,它会产生以下结果 -
[1] TRUE[1] 5[1] 8
读取数据框中的数据后,我们可以应用适用于数据框的所有函数,如下一节所述。
获得最高工资
# Create a data frame.data <- read.csv("input.csv")# Get the max salary from data frame.sal <- max(data$salary)print(sal)
当我们执行上面的代码时,它会产生以下结果 -
[1] 843.25
获取最高薪水猫护理人员的详细信息
我们可以获取满足特定过滤条件的行,类似于 SQL where 子句。
# Create a data frame.data <- read.csv("input.csv")# Get the max salary from data frame.sal <- max(data$salary)# Get the person detail having max salary.retval <- subset(data, salary == max(salary))print(retval)
当我们执行上面的代码时,它会产生以下结果 -
id name salary start_date dept5NA Gary 843.25 -03-27 Finance
让所有在 IT 部门工作的人员
# Create a data frame.data <- read.csv("input.csv")retval <- subset( data, dept == "IT")print(retval)
当我们执行上面的代码时,它会产生以下结果 -
id namesalary start_date dept11 Rick623.3 -01-01 IT33 Michelle 611.0 -11-15 IT66 Nina578.0 -05-21 IT
获取IT部门工资大于600的人员
# Create a data frame.data <- read.csv("input.csv")info <- subset(data, salary > 600 & dept == "IT")print(info)
当我们执行上面的代码时,它会产生以下结果 -
id namesalary start_date dept11 Rick623.3 -01-01 IT33 Michelle 611.0 -11-15 IT
获取 年或之后加入的用户
# Create a data frame.data <- read.csv("input.csv")retval <- subset(data, as.Date(start_date) > as.Date("-01-01"))print(retval)
当我们执行上面的代码时,它会产生以下结果 -
id namesalary start_date dept33 Michelle 611.00 -11-15 IT44 Ryan729.00 -05-11 HR5NA Gary843.25 -03-27 Finance88 Guru722.50 -06-17 Finance
写入 CSV 文件
R 可以从现有数据框创建 csv 文件。write.csv()函数用于创建 csv 文件。此文件在工作目录中创建。
# Create a data frame.data <- read.csv("input.csv")retval <- subset(data, as.Date(start_date) > as.Date("-01-01"))# Write filtered data into a new file.write.csv(retval,"output.csv")newdata <- read.csv("output.csv")print(newdata)
当我们执行上面的代码时,它会产生以下结果 -
Xid namesalary start_date dept1 33 Michelle 611.00 -11-15 IT2 44 Ryan729.00 -05-11 HR3 5NA Gary843.25 -03-27 Finance4 88 Guru722.50 -06-17 Finance
这里的 X 列来自数据集 newper。可以在写入文件时使用其他参数删除此参数。
# Create a data frame.data <- read.csv("input.csv")retval <- subset(data, as.Date(start_date) > as.Date("-01-01"))# Write filtered data into a new file.write.csv(retval,"output.csv", row.names = FALSE)newdata <- read.csv("output.csv")print(newdata)
当我们执行上面的代码时,它会产生以下结果 :
id namesalary start_date dept13 Michelle 611.00 -11-15 IT24 Ryan729.00 -05-11 HR3NA Gary843.25 -03-27 Finance48 Guru722.50 -06-17 Finance