您的位置:

r语言dataframe变为数值型

一、读取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是新列的列名。