一、读取dataframe
在r语言中,读取数据最常用的函数是read.csv和read.table。这两个函数都可以读取csv和txt两种格式的文件,将数据读入到r语言中,存储为dataframe类型。下面是一个简单的读取csv文件的例子:
data <- read.csv("example.csv")
二、查看dataframe
在读取数据之后,我们通常需要查看一下数据的基本情况,包括纬度、变量类型、缺失值等等。
1. 纬度
通过dim函数可以查看数据的纬度,即行数和列数:
dim(data)
2. 变量类型
可以通过str函数查看数据框中每个变量的类型、名称、第一个观测值;
str(data)
如果要查看数据框中某个变量的类型,可以使用class函数:
class(data$Column1)
3. 缺失值
我们需要查看一下数据框中是否存在缺失值,可以使用sum和is.na函数来查看:
sum(is.na(data)) # 总缺失值数
sum(is.na(data$Column1)) # Column1列的缺失值数
三、将数据框转为数值型
通常,我们在处理数据时需要将数据框中的某些列转为数值型,以便进行数值计算。下面介绍一些方法:
1. as.numeric()
as.numeric()函数可以将一个向量或者数据框的某一列转为数值型。
data$Column1_numeric <- as.numeric(data$Column1)
需要注意的是,如果在数据框中存在非数值类型的缺失值(例如字符型"NA"),使用as.numeric()函数转换会返回NA:
example_vec <- c(1, 2, 3, "NA", 4, 5)
as.numeric(example_vec) # 将返回有关警告和NA
为了解决这个问题,可以先将NA替换成0,再将vector转为数值型:
example_vec[example_vec == "NA"] <- "0"
example_vec <- as.numeric(example_vec)
2. sapply()
sapply函数可以在数据框中批量进行列的转换,例如将所有列都转为数值型:
df_num <- sapply(data, as.numeric)
需要注意的是,如果数据框中某些列是非数值型的,会存在警告信息,但不会影响转换结果。
3. apply()
apply函数可以对数据框的某行或某列进行操作。对于转换数据类型的需求,可以使用apply函数,比如将整个数据框转为数值型(注意,在含有缺失值的列中,apply函数默认将缺失值视为最小值,可能会影响结果):
data_num <- apply(data, 2, as.numeric)
四、删除dataframe中的空值、重复项
1. 删除空值
对于含有缺失值的数据框,可以使用na.omit()函数删除含有缺失值的行:
data_clean <- na.omit(data)
如果只要删除某列含有缺失值的行,可以这样做:
data_clean <- data[-which(is.na(data$Column1)),]
其中[-which(is.na(data$Column1)),]表示删除data中Column1列中含有NA的行。
2. 删除重复项
可以使用unique()函数删除所有列都完全相同的重复行:
data_unique <- unique(data)
如果只想针对某一列来删除重复项,可以使用duplicated()函数:
data_dump <- data[!duplicated(data$Column1),]
五、数据reshape
reshape是一个重要的数据处理步骤,它可以将数据从一种形式转换为另一种形式。
1. reshape()
reshape函数可以将数据从长格式转换成宽格式(或者从宽格式转换成长格式)。下面是一个从长格式转换为宽格式的例子:
library(reshape2)
data_new <- reshape(data, idvar = "Column1", timevar = "Column2", direction = "wide")
其中,idvar参数指定变量名或者下标,默认将不作处理; timevar参数指定需要转换的变量名或者下标,direction参数指示需要转换方向。
2. melt()
melt函数可以将数据从宽格式转换成长格式。下面是一个从宽格式转换为长格式的例子:
data_melt <- melt(data_new, id.vars = "Column1", variable.name = "month", value.name = "num")
其中,id.vars参数指定需要保留的变量或下标,variable.name和value.name是新列的列名。