Membuat dummy variabel-

Saya memiliki masalah yang menghasilkan berikut dummy variabel dalam R:

I'm menganalisis tahunan data deret waktu (time periode 1948-2009). Saya punya dua pertanyaan:

  1. Bagaimana saya menghasilkan variabel dummy untuk pengamatan #10, yaitu untuk tahun 1957 (nilai = 1 pada tahun 1957 dan nol sebaliknya)?

  2. Bagaimana saya menghasilkan variabel dummy adalah nol sebelum tahun 1957 dan mengambil nilai 1 dari tahun 1957 dan seterusnya untuk tahun 2009?

Pilihan lain yang dapat bekerja lebih baik jika anda memiliki banyak variabel adalah faktor dan model.matrix.

> year.f = factor(year)
> dummies = model.matrix(~year.f)

Ini akan mencakup mencegat kolom (semua orang) dan satu kolom untuk setiap tahun dalam mengatur data anda kecuali satu, yang akan menjadi "default" atau mencegat nilai.

Anda dapat mengubah bagaimana "default" yang dipilih oleh bermain-main dengan kontras.arg di model.matrix.

Juga, jika anda ingin menghilangkan mencegat, anda hanya bisa drop kolom pertama atau tambahkan +0 untuk akhir formula.

Semoga ini berguna.

Komentar (10)

Cara paling sederhana untuk menghasilkan dummy variabel adalah sesuatu seperti berikut:

> print(year)
[1] 1956 1957 1957 1958 1958 1959
> dummy  print(dummy)
[1] 0 1 1 0 0 0
> dummy2 = 1957)
> print(dummy2)
[1] 0 1 1 1 1 1

Secara lebih umum, anda dapat menggunakan ifelse untuk memilih di antara dua nilai, tergantung pada kondisi. Jadi jika bukan 0-1 variabel dummy, untuk beberapa alasan anda ingin gunakan, mengatakan, 4 dan 7, anda bisa menggunakan ifelse(tahun == 1957, 4, 7).

Komentar (0)

Menggunakan dummies::dummy():


library(dummies)

# example data
df1 
Komentar (4)

Paket mlr termasuk createDummyFeatures untuk tujuan ini:


library(mlr)
df 
Komentar (2)

Lain jawaban di sini menawarkan rute langsung untuk menyelesaikan tugas ini—salah satu yang banyak model (misalnya lm) akan lakukan untuk anda secara internal pula. Meskipun demikian, di sini adalah cara untuk membuat dummy variabel dengan Max Kuhn's populer sisipan dan resep paket. Sementara agak lebih verbose, mereka berdua skala mudah untuk situasi yang lebih rumit, dan cocok rapi ke masing-masing kerangka.


karet::dummyVars

Dengan karet, fungsi yang relevan adalah dummyVars, yang memiliki memprediksi metode untuk menerapkannya pada data frame:

df  
#> Formula: ~.
#> 2 variables, 1 factors
#> Variables and levels will be separated by '.'
#> A full rank encoding is used

predict(dummy, df)
#>   letter.b letter.c y
#> 1        0        0 1
#> 2        0        0 2
#> 3        1        0 3
#> 4        1        0 4
#> 5        0        1 5
#> 6        0        1 6

resep::step_dummy

Dengan resep, fungsi yang relevan adalah step_dummy:

library(recipes)

dummy_recipe % 
    step_dummy(letter)

dummy_recipe
#> Data Recipe
#> 
#> Inputs:
#> 
#>       role #variables
#>    outcome          1
#>  predictor          1
#> 
#> Steps:
#> 
#> Dummy variables from letter

Tergantung pada konteks, ekstrak data dengan persiapan dan panggang atau jus:

# Prep and bake on new data...
dummy_recipe %>% 
    prep() %>% 
    bake(df)
#> # A tibble: 6 x 3
#>       y letter_b letter_c
#>           
#> 1     1        0        0
#> 2     2        0        0
#> 3     3        1        0
#> 4     4        1        0
#> 5     5        0        1
#> 6     6        0        1

# ...or use `retain = TRUE` and `juice` to extract training data
dummy_recipe %>% 
    prep(retain = TRUE) %>% 
    juice()
#> # A tibble: 6 x 3
#>       y letter_b letter_c
#>           
#> 1     1        0        0
#> 2     2        0        0
#> 3     3        1        0
#> 4     4        1        0
#> 5     5        0        1
#> 6     6        0        1
Komentar (0)

Apa yang biasanya saya lakukan untuk bekerja dengan jenis variabel dummy adalah:

(1) bagaimana cara menghasilkan variabel dummy untuk pengamatan #10, yaitu untuk tahun 1957 (nilai = 1 pada tahun 1957 dan nol sebaliknya)


data$factor_year_1 
Komentar (0)

Untuk usecase seperti yang disajikan dalam pertanyaan, anda juga dapat memperbanyak logis dengan kondisi 1 (atau mungkin bahkan lebih baik, dengan 1L):


# example data
df1 
Komentar (0)

Saya membaca ini di kaggle forum:


#Generate example dataframe with character column
example 
Komentar (0)

Jika anda ingin mendapatkan K variabel dummy, bukan K-1, coba:

dummies = table(1:length(year),as.factor(year))  

Terbaik,

Komentar (1)

≪a href="https://stat.ethz.ch/R-manual/R-devel/library/base/html/ifelse.html">`ifelse` fungsi adalah yang terbaik untuk logika sederhana seperti ini.

> x   [1] 1 1 1 1 1 1 1 1 0 0 0

Juga, jika anda ingin mengembalikan data karakter maka anda dapat melakukannya.

> x   [1] "foo" "foo" "foo" "foo" "foo" "foo" "foo" "foo" "bar" "bar" "bar"

Variabel kategori dengan bersarang...

> x   [1] "baz" "baz" "baz" "baz" "baz" "baz" "baz" "foo" "bar" "baz" "baz"

Ini adalah yang paling mudah pilihan.

Komentar (0)

Cara lain adalah dengan menggunakan mtabulate dari qdapTools paket, yaitu


df 
Komentar (0)

Saya menggunakan fungsi tersebut (untuk data.tabel):

# Ta funkcja dla obiektu data.table i zmiennej var.name typu factor tworzy dummy variables o nazwach "var.name: (level1)"
factorToDummy  new.names
  dtable[, (new.names) := transpose(lapply(get(var.name), FUN = function(x){x == levels(get(var.name))})) ]

  cat(paste("\nDodano zmienne dummy: ", paste0(new.names, collapse = ", ")))
}

Penggunaan:


data 
Komentar (0)

Mengkonversi data ke data.meja dan penggunaan yang ditetapkan oleh referensi dan baris penyaringan


library(data.table)

dt 
Komentar (0)

Kita juga bisa menggunakan cSplit_e dari splitstackshape. Menggunakan @zx8754's data


df1 
Komentar (0)

cara lain yang dapat anda lakukan adalah menggunakan

ifelse(year < 1965 , 1, 0)
Komentar (0)

Hi saya menulis ini secara umum fungsi untuk menghasilkan sebuah variabel dummy yang pada dasarnya meniru menggantikan fungsi di Stata.

Jika x adalah data frame adalah x dan saya ingin dummy variabel yang disebut a yang akan mengambil nilai 1 ketika x$b mengambil nilai c


introducedummy
Komentar (0)