R中

2016-11-30 47 views
1

替换分​​类变量的缺失值和多发的变量,我面临着以下问题:R中

  1. 我要替换“未知”某分类变量的所有NA的,但是这是行不通的。

下面的代码:

X < - “未知”

KD $ form_of_address [其中(is.na(KD $ form_of_address)))< - X

我执行时出现问题

等级(kd $ form_of_address) 不幸的是,我的输出不包含“未知”。

  • 我的资料包含电子书,其重量总是为0哪个代码是适当的,以替换可变ebook_count与ebook_count的值可变重量所述NAS> 0与0?
  • 预先感谢您:)

    +1

    你能提供一些简单的数据作为最小的可重复的例子吗?这将帮助人们更容易地帮助你。 – ds440

    +0

    检查你是否有'character'变量或'factor'? – akrun

    回答

    0

    我假设你的变量在因素的形式,它不会让你改变它的细胞,如果它不在水平。

    使用iris,让我们看看可能发生了什么以及如何解决它。

    str(iris) 
    'data.frame': 150 obs. of 5 variables: 
    $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... 
    $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... 
    $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... 
    $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... 
    $ Species  : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... 
    

    我们可以看到Species变量是一个因子。 我们可以把一些来港到它的:

    iris[c(11:13),5] = NA 
    iris[c(11:15), ] 
    
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
    11   5.4   3.7   1.5   0.2 <NA> 
    12   4.8   3.4   1.6   0.2 <NA> 
    13   4.8   3.0   1.4   0.1 <NA> 
    14   4.3   3.0   1.1   0.1 setosa 
    15   5.8   4.0   1.2   0.2 setosa 
    

    现在,如果我尝试,以填补“未知”那些来港使用代码:

    x = "Unknown" 
    iris$Species[which(is.na(iris$Species))] = x 
    

    这将产生:

    警告信息:在[<-.factor*tmp*,其中(.na(iris $物种)), value = c(1L,:无效因子水平,产生NA

    你可以做的第一件事是到一个新的水平添加到您的变量,然后你可以这样做

    levels(iris$Species) = c(levels(iris$Species), "Unknown") 
    levels(iris$Species) 
    [1] "setosa"  "versicolor" "virginica" "Unknown" 
    #You can see now Unknown is one of the levels 
    
    iris$Species[which(is.na(iris$Species))] = "Unknown" 
    table(iris$Species) 
        setosa versicolor virginica Unknown 
         47   50   50   3 
    
    +0

    好吧:)工作得很好:)我有另一个问题。我尝试用中间值替换剩余的NAs。因此,我做了:'medianbook < - median(kd [kd $ book_count> 0,23],na.rm = TRUE) kd $ weight [which(is。na(kd $ weight [which(kd $ book_count> 0)]))] = medianbook'但它没有工作 - .-。任何想法 ? –

    +0

    @LiliMatic我明白你的问题的要点,但你能提供一个可生成的数据集吗?你可以做''dput(kd)'',它会创建一个脚本来生成kd,你只需要复制并粘贴它。 – Chris

    +0

    另外,原谅我的第二部分。这是一个错误的脚本。即使重量不是NA,它也会改变** EVERY **重量值,即相应的ebook_count> 0。我现在要删除第二部分。 – Chris