R中

2016-11-30 54 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