R - NA处理和数据标准化

NA值处理

数据NA值查看

# 查看是否有NA值
is.na(data)
na.fail(DF)
# 查看有多少NA值
length(data[is.na(data)])
# 显示出NA数超过某百分比值的行,如20%
manyNAs(data , 0.2)

NA值处理

  1. 直接删掉含NA的那行
na.omit(data)
  1. 用某值将其替换掉,如0
data[is.na(data)] <- 0 
  1. 通过探索相关性将NA值填补上
cor(data , use = "complete.obs")
  1. the k-nearest neighbours
# 通过means, median, weighAvg
library(DMwR)
cleanData <- knnImputation(data, k = 10, scale = T, 
              meth = "weighAvg", distData = NULL)

# 用没有缺失的值得中位数插入
cleanData <- centralImputation(data)
  1. impute any missing values in the training set using proximities
library(randomForest)  
data.imputed <- rfImpute(variable1 ~ ., data = data, iter=6)
  1. missMDA :Impute the missing values of a dataset with the Principal Components Analysis model.

数据标准化

数据的标准化(normalization)是将数据按比例缩放,使之落入一个特定区间;目的是去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权,在某些比较和评价的指标处理中经?;嵊玫?。其中最典型的就是数据的归一化处理,即将数据统一映射到[0,1]区间上。

目前数据标准化方法有多种,归结起来可以分为直线型方法(如极值法、标准差法)、折线型方法(如三折线法)、曲线型方法(如半正态性分布)。不同的标准化方法,对系统的评价结果会产生不同的影响,但在数据标准化方法的选择上并没有通用的法则。

数据标准化是不会改变原数据的分布状况的,否则相当于原始数据发生了改变,那就修改了源数据了。(并不)

#  生成均匀分布数据
set.seed(13)
data <- runif(1000)
scale <- scale(data)
norm <- rnorm(1000)
ggplot() + geom_density(aes(x = data))
data.jpeg
# scale(){base} 标准化
scale <- scale(data)
ggplot() + geom_density(aes(x = scale))
scale.jpeg
# min-max
min_max = (data-min(data))/(max(data)-min(data))

# qqplot 检测分布变化
qqplot(data, min_max)
data, min_max.jpeg
log <- log10(data)/log10(max(data))
qqplot(norm, log)

norm, log.jpeg

虽然分布改变了,但是也没有完全正态化。

常用方法

  1. atan函数转换

  2. min-max标准化(Min-Max Normalization)

    也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。

    X=(x-min)/(max-min)

    其中max为样本数据的最大值,min为样本数据的最小值。

    优点:所有的值都会是正值,会更加反映数据的意义。

    缺陷:当有新数据加入时,可能导致max和min的变化,需要重新定义。

  3. log 转化

    log2

    log10

  4. scale(){base}

    x是数值矩阵,当center=TRUE时,为数据对象x按列进行中心化;当scale=TRUE时,为数据对象x按列进行标准化。

    • 中心化是把每个数据减去均值;
    • 标准化是在中心化后的数据基础上再除以数据的标准差;

vegan 中数据标准化方法

  1. decostand() {vegan}(x, method, MARGIN, range.global, na.rm = FALSE)

    • total: 除以行和或列和 (default MARGIN = 1);
    • max:除以行或列的最大值(default MARGIN = 2);
    • freq:除以行或列的最大值,并乘以非零值的个数(default MARGIN=2);
    • normalize:使行或列的平方和等于1 (default MARGIN = 1);
    • range: 标准化使行或列的值在0 ... 1 (default MARGIN = 2).
    • standardize:标准化使行或列的和为1且方差为1(default MARGIN = 2);
    • pa: 将数据转换为0、1数据;
    • chi.square: 除以行和及列和的平方根;
    • hellinger: 采用total标准化以后再取平方根;
  2. wisconsin() {vegan}:除以列最大值,再除以行和。

FactoMineR 内置标准化参数

PCA(x, scale.unit = TRUE)
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351