数据的存储不仅要方便人录入也要方便程序进行阅读。
数据有许多存储格式,在此我探究了那些数据存储的格式和一些转换方法。提醒我们关注在输入数据时遵守一些规则,使程序在读取时不会报错。
update
R语言数据帧
在导入数据之前,先了解R中数据测存在方式。
数据帧是一个表或二维数组状结构,其中每一列包含一个可变的值和每行包含一组来自每列的值。
下面是一个数据帧的特征。
- 列名应为非空。
- 行的名称应该是唯一的。
- 存储在数据帧中的数据可以是数字,因子或字符类型。
- 每列应包含数据项的数量相同。
创建数据帧
# Create the data frame.
emp.data <- data.frame(
emp_id = c (1:5),
emp_name = c(“Rick”,“Dan”,“Michelle”,“Ryan”,“Gary”),
salary = c(623.3,515.2,611.0,729.0,843.25),
start_date = as.Date(c(“2012-01-01”,“2013-09-23”,“2014-11-15”,“2014-05-11”,“2015-03-27”)),
stringsAsFactors=FALSE
)
#数据按照列输入,相同属性在同一列;列标题相同。
# Print the data frame.
print(emp.data)
得到数据帧的结构
数据帧的结构可以通过使用函数 str()了解到
str(emp.data)
‘data.frame’: 5 obs. of 4 variables:
$ emp_id : int 1 2 3 4 5
$ emp_name : chr “Rick” “Dan” “Michelle” “Ryan” …
$ salary : num 623 515 611 729 843
数据在数据帧摘要
print(summary(emp.data))
从数据帧中提取数据
使用列名称从数据帧提取特定的列
result <- data.frame(emp.data$emp_name,emp.data$salary)
# 提出emp.data.emp_name和emp.data.salary
result <- emp.data[1:2,]
#提出第一行到第二行的所有列
emp_id emp_name salary start_date
1 1 Rick 623.3 2012-01-01
2 2 Dan 515.2 2013-09-23
提取第3和第5行与第2和第4列
result <- emp.data[c(3,5),c(2,4)]
# 列表中的(3,2)和(5,4)位置的数据
#先提出行,再提出列
扩展数据帧
添加列
只需使用新列名称添加列向量。为每个研究对象添加新的属性。
新列:数据,数据,数据
emp.data$dept <- c(“IT”,“Operations”,“IT”,“HR”,“Finance”)
添加行
要添加更多的行永久到现有的数据帧,我们需要引入新的行中的结构要与现有数据帧相同,并使用 rbind()函数。
即加入一个研究对象,但是他的属性要和原来的形同。
# Create the first data frame.
emp.data <- data.frame(
emp_id = c (1:5),
emp_name = c(“Rick”,“Dan”,“Michelle”,“Ryan”,“Gary”),
salary = c(623.3,515.2,611.0,729.0,843.25),
start_date = as.Date(c(“2012-01-01”,“2013-09-23”,“2014-11-15”,“2014-05-11”,“2015-03-27”)),
dept=c(“IT”,“Operations”,“IT”,“HR”,“Finance”),
stringsAsFactors=FALSE
)
# Create the second data frame
emp.newdata <- data.frame(
emp_id = c (6:8),
emp_name = c(“Rasmi”,“Pranab”,“Tusar”),
salary = c(578.0,722.5,632.8),
start_date = as.Date(c(“2013-05-21”,“2013-07-30”,“2014-06-17”)),
dept = c(“IT”,“Operations”,“Fianance”),
stringsAsFactors=FALSE
)
# Bind the two data frames.
emp.finaldata <- rbind(emp.data,emp.newdata)
print(emp.finaldata)
可以看成合并两个研究对象的数据到一个表。
使用R处理导入的数据有时候需要程序包的使用。
R语言软件包
R程序包是R里面的函数,编译后的代码和样本数据的集合。它们是存储在在R环境下的 “library” 目录下。默认情况下R安装过程中会安装一组/些软件包。更多的包以后添加,当需要为某些特定目的使用时。当我们开始R控制台,只有默认默认情况下安装的包可用。已经安装了哪些其它包必须显式地装入要使用R程序,当在需要使用它们的时候。
R中语言,所有的包列在 R Packages.
检查可用R程序包
获取包含R程序包库位置
.libPaths()
获取所有安装的软件包列表
library()
获取当前在R环境中加载的所有软件包
search()
安装一个新的软件包
有两种方法来添加新的R语言软件包。一种是直接从CRAN目录中进行安装,另一个是在将软件包下载到本地系统,并手动安装。
直接从CRAN安装
下面的命令直接从CRAN网页获取包,并在R语言环境中安装软件包。可能会提示您选择一个最近的镜像。选择一个适合自己的位置。
install.packages(“Package Name”)
# Install the package named “XML”.
install.packages(“XML”)
手动安装软件包
下载需要的软件包。保存该包在一个合适的位置,在本地系统中的一个 .zip 文件。
现在可以运行下面的命令在R环境中安装该软件包。
install.packages(file_name_with_path, repos = NULL, type=“source”)
# Install the package named “XML”
install.packages(“E:/XML_3.98-1.3.zip”, repos = NULL, type=“source”)
装载软件包到库
在代码中使用一个软件包之前,它必须先加载到当前R环境。还需要加载一个已经以前安装的软件包,但在目前的环境中没有软件包。
一个软件包使用下面的命令加载:
library(“package Name”, lib.loc=“path to library”)
# Load the package named “XML”
install.packages(“E:/XML_3.98-1.3.zip”, repos = NULL, type=“source”)
R数据重塑
R语言中的数据重塑是关于变化的数据分为行和列的方式。大多数R地数据处理的时候是通过将输入的数据作为一个数据帧进行。这是很容易提取一个数据帧的行和列数据,但在某些情况,当我们需要的数据帧的格式是不同的来自收到它的格式。 R有许多函数用来分割,合并,改变行列,反之亦然在一个数据帧。
接合列和行中的数据帧
我们可以加入多个向量创建使用 cbind()函数返回数据帧。
同时,我们也可以使用 rbind()函数合并两个数据帧。
简单来说,cbind()可以给所有人加个属性,rbind()加个人和他的所有所学(加一排在后面)
#Create vector objects.
city <- c("Tampa","Seattle","Hartford","Denver")
state <- c("FL","WA","CT","CO")
zipcode <- c(33602,98104,06161,80294)
\# Combine above three vectors into one data frame.
addresses <- cbind(city,state,zipcode)
\# Print a header.
cat("# # # # The First data framen")
\# Combine rows form both the data frames.
all.addresses <- rbind(addresses,new.address)
合并数据帧
我们可以通过使用 merge()函数合并两个数据帧。该数据帧必须在其上合并发生相同的列名
熔化和转换
melt():将属性那一列容忍对象,变成属性变量·值的的形式
cast():将属性变量·值重构为一列属性
我们认为数据集被称为 ships 出现在库被称为 “MASS”.
``library(MASS)`
print(ships)
融化数据
mo拆分数据进行重组,将除类型和年份以外的所有列转换为多行展示。
lten.ships <- melt(ships, id = c("type","year"))
print(molten.ships)
转换数据
我们可以将被拆分的数据转换为一种新形式,使用cast()函数创建每年每种类型的船的总和。
我们可以转化数据转换成在创建每种类型的 ships 每年的汇总的新形式。它是通过使用 case()函数。
R语言处理CSV文件
获取和设置工作目录
可以获得 R 的工作空间目录指向使用 getwd()函数。也可以使用 setwd()函数来设置一个新的工作目录。
`# Get and print current working directory.`
print(getwd())
``
\# Set current working directory.
setwd("/web/com")
``
\# Get and print current working directory.
print(getwd())
输入为CSV文件
CSV文件是以一个以列值是用逗号分隔的文本文件。让我们考虑目前命名文件:input.csv 的文件中的以下数据。
可以使用Windows记事本通过复制创建该文件,并粘贴这些数据到记事本中。使用另存为所有文件(.) ,在记事本选项将文件保存为:input.csv。
id,name,salary,start_date,dept
1,Rick,623.3,2012-01-01,IT
2,Dan,515.2,2013-09-23,Operations
3,Michelle,611,2014-11-15,IT
4,Ryan,729,2014-05-11,HR
,Gary,843.25,2015-03-27,Finance
6,Nina,578,2013-05-21,IT
7,Simon,632.8,2013-07-30,Operations
8,Guru,722.5,2014-06-17,Finance
读一个CSV文件
以下是 read.csv()函数的一个简单的例子,它读取在当前工作目录的可用的 CSV 文件:
data <- read.csv("input.csv")
print(data)
分析CSV文件
默认情况下,read.csv()函数给出一个数据帧的输出。这可以容易地确认如下。此外,我们可以检查列和行的数。
data <- read.csv("input.csv")
``
print(is.data.frame(data))
print(ncol(data))
print(nrow(data))
获得的最高薪水
sal <- max(data$salary) #从data使用max函数访问salary,输出最大值给sal。
找最大薪水的人的细节信息
retval <- subset(data, salary == max(salary))
\#从data使用subset函数访问salsry中值为max(salary)的对象,输出对象的细节信息给retval。
``
retval <- subset( data, dept == "IT")
同理,访问data之中IT的相关信息
就像人找表一样。
写入到CSV文件
R语言能够从现有的数据帧来创建 csv 文件。write.csv()函数用于创建CSV文件。这个文件会在工作目录中创建。
`# Create a data frame.`
data <- read.csv("input.csv")
retval <- subset(data, as.Date(start_date) > as.Date("2014-01-01"))
``
\# Write filtered data into a new file.
write.csv(retval,"output.csv")
newdata <- read.csv("output.csv")
print(newdata)
``
读取,写入,再读取检验。
write.csv(retval,"output.csv", row.names=FALSE)
\# 关闭行源id